Date: Monday, April 22, 2013 @ 05:37:28
  Author: bgyorgy
Revision: 88723

upgpkg: cinnamon-control-center 1.7.3-2

Rebuild for GNOME 3.8, add some compatibility fixes

Added:
  cinnamon-control-center/trunk/gnomerrlabeler.patch
  cinnamon-control-center/trunk/idle-delay.patch
Modified:
  cinnamon-control-center/trunk/PKGBUILD

----------------------+
 PKGBUILD             |   23 -
 gnomerrlabeler.patch |  766 +++++++++++++++++++++++++++++++++++++++++++++++++
 idle-delay.patch     |   63 ++++
 3 files changed, 844 insertions(+), 8 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2013-04-22 01:27:44 UTC (rev 88722)
+++ PKGBUILD    2013-04-22 03:37:28 UTC (rev 88723)
@@ -6,23 +6,33 @@
 
 pkgname=cinnamon-control-center
 pkgver=1.7.3
-pkgrel=1
+pkgrel=2
 pkgdesc="The Control Center for Cinnamon"
 arch=('i686' 'x86_64')
-depends=('cinnamon' 'cheese' 'libgtop' 'network-manager-applet')
+depends=('cinnamon' 'cheese' 'libgnomekbd' 'libgtop' 'network-manager-applet')
 optdepends=('mesa-demos: provides glxinfo for graphics information'
             'gnome-color-manager: for color management tasks')
-makedepends=('intltool' 'gnome-common' 'libgnomekbd')
+makedepends=('intltool' 'gnome-common')
 url="https://github.com/linuxmint/cinnamon-control-center";
 install=cinnamon-control-center.install
 license=('GPL')
 options=('!libtool' '!emptydirs')
-source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/cinnamon-control-center/archive/$pkgver.tar.gz";)
-sha256sums=('44a4484238c2b9e9060d062028438df589fc29c9e3da45edad068198a990c8be')
+source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/cinnamon-control-center/archive/$pkgver.tar.gz";
+        "gnomerrlabeler.patch"
+        "idle-delay.patch")
+sha256sums=('44a4484238c2b9e9060d062028438df589fc29c9e3da45edad068198a990c8be'
+            '826de61fa60349a99c6895f2ffb0ea1c7f71031b17dd80bb245e3834b30b6ff6'
+            '9ca1a56b19413cc86dfce10558e1f696d63b93134afc76c0cb467944a9ea10f5')
 
 build() {
   cd $pkgname-$pkgver
 
+  # Build fix for GNOME 3.8
+  patch -Np1 -i "$srcdir/gnomerrlabeler.patch"
+
+  # Runtime fix for GNOME 3.8
+  patch -Np1 -i "$srcdir/idle-delay.patch"
+
   autoreconf -fi
 
   ./configure --prefix=/usr --sysconfdir=/etc \
@@ -48,9 +58,6 @@
   make -C shell DESTDIR="$pkgdir" uninstall
   make -C shell DESTDIR="$pkgdir" install-libLTLIBRARIES
 
-  # Remove Region panel, because it's not compatible with 
gnome-settings-daemon 3.6
-  make -C panels/region DESTDIR="$pkgdir" uninstall
-
   # Remove broken desktop files
   rm -R "$pkgdir/usr/share/applications"
   rm -R "$pkgdir/etc"

Added: gnomerrlabeler.patch
===================================================================
--- gnomerrlabeler.patch                                (rev 0)
+++ gnomerrlabeler.patch        2013-04-22 03:37:28 UTC (rev 88723)
@@ -0,0 +1,766 @@
+diff -Naur 
cinnamon-control-center-1.7.3.orig/panels/display/cc-display-panel.c 
cinnamon-control-center-1.7.3/panels/display/cc-display-panel.c
+--- cinnamon-control-center-1.7.3.orig/panels/display/cc-display-panel.c       
2013-04-15 16:04:38.000000000 +0200
++++ cinnamon-control-center-1.7.3/panels/display/cc-display-panel.c    
2013-04-22 03:46:53.499944701 +0200
+@@ -31,12 +31,13 @@
+ #define GNOME_DESKTOP_USE_UNSTABLE_API
+ #include <libgnome-desktop/gnome-rr.h>
+ #include <libgnome-desktop/gnome-rr-config.h>
+-#include <libgnome-desktop/gnome-rr-labeler.h>
+ #include <gdk/gdkx.h>
+ #include <X11/Xlib.h>
+ #include <glib/gi18n.h>
+ #include <gdesktop-enums.h>
+ 
++#include "cc-rr-labeler.h"
++
+ CC_PANEL_REGISTER (CcDisplayPanel, cc_display_panel)
+ 
+ #define DISPLAY_PANEL_PRIVATE(o) \
+@@ -75,7 +76,7 @@
+ {
+   GnomeRRScreen       *screen;
+   GnomeRRConfig  *current_configuration;
+-  GnomeRRLabeler *labeler;
++  CcRRLabeler *labeler;
+   GnomeRROutputInfo         *current_output;
+ 
+   GSettings      *clock_settings;
+@@ -200,7 +201,7 @@
+         g_signal_handler_disconnect (GTK_WIDGET (self), 
self->priv->focus_id_hide);
+     }
+ 
+-  gnome_rr_labeler_hide (self->priv->labeler);
++  cc_rr_labeler_hide (self->priv->labeler);
+   g_object_unref (self->priv->labeler);
+ 
+   G_OBJECT_CLASS (cc_display_panel_parent_class)->finalize (object);
+@@ -293,16 +294,16 @@
+   self->priv->current_output = NULL;
+ 
+   if (self->priv->labeler) {
+-    gnome_rr_labeler_hide (self->priv->labeler);
++    cc_rr_labeler_hide (self->priv->labeler);
+     g_object_unref (self->priv->labeler);
+   }
+ 
+-  self->priv->labeler = gnome_rr_labeler_new 
(self->priv->current_configuration);
++  self->priv->labeler = cc_rr_labeler_new (self->priv->current_configuration);
+ 
+   if (cc_panel_get_shell (CC_PANEL (self)) == NULL)
+-    gnome_rr_labeler_hide (self->priv->labeler);
++    cc_rr_labeler_hide (self->priv->labeler);
+   else
+-    gnome_rr_labeler_show (self->priv->labeler);
++    cc_rr_labeler_show (self->priv->labeler);
+ 
+   select_current_output_from_dialog_position (self);
+ 
+@@ -2594,9 +2595,9 @@
+   if (self->priv->labeler == NULL)
+     return;
+   if (gtk_window_has_toplevel_focus (window))
+-    gnome_rr_labeler_show (self->priv->labeler);
++    cc_rr_labeler_show (self->priv->labeler);
+   else
+-    gnome_rr_labeler_hide (self->priv->labeler);
++    cc_rr_labeler_hide (self->priv->labeler);
+ }
+ 
+ static void
+@@ -2606,9 +2607,9 @@
+     if (CC_DISPLAY_PANEL(widget)->priv->labeler == NULL)
+         return;
+     if (gtk_widget_get_visible (widget)) {
+-        gnome_rr_labeler_show (CC_DISPLAY_PANEL (widget)->priv->labeler);
++        cc_rr_labeler_show (CC_DISPLAY_PANEL (widget)->priv->labeler);
+     } else {
+-        gnome_rr_labeler_hide (CC_DISPLAY_PANEL (widget)->priv->labeler);
++        cc_rr_labeler_hide (CC_DISPLAY_PANEL (widget)->priv->labeler);
+     }
+ }
+ 
+diff -Naur cinnamon-control-center-1.7.3.orig/panels/display/cc-rr-labeler.c 
cinnamon-control-center-1.7.3/panels/display/cc-rr-labeler.c
+--- cinnamon-control-center-1.7.3.orig/panels/display/cc-rr-labeler.c  
1970-01-01 01:00:00.000000000 +0100
++++ cinnamon-control-center-1.7.3/panels/display/cc-rr-labeler.c       
2013-04-22 03:42:12.379900127 +0200
+@@ -0,0 +1,601 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * cc-rr-labeler.c - Utility to label monitors to identify them
++ * while they are being configured.
++ *
++ * Copyright 2008, Novell, Inc.
++ *
++ * This file is part of the Gnome Library.
++ *
++ * The Gnome Library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * The Gnome Library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with the Gnome Library; see the file COPYING.LIB.  If not,
++ * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth 
Floor,
++ * Boston, MA 02110-1301, USA.
++ *
++ * Author: Federico Mena-Quintero <feder...@novell.com>
++ */
++
++#include <config.h>
++#include <glib/gi18n-lib.h>
++#include <gtk/gtk.h>
++
++#include <X11/Xproto.h>
++#include <X11/Xlib.h>
++#include <X11/Xutil.h>
++#include <X11/Xatom.h>
++#include <gdk/gdkx.h>
++
++#include "cc-rr-labeler.h"
++
++struct _CcRRLabelerPrivate {
++      GnomeRRConfig *config;
++
++      int num_outputs;
++
++      GdkRGBA *palette;
++      GtkWidget **windows;
++
++      GdkScreen  *screen;
++      Atom        workarea_atom;
++};
++
++enum {
++      PROP_0,
++      PROP_CONFIG,
++      PROP_LAST
++};
++
++G_DEFINE_TYPE (CcRRLabeler, cc_rr_labeler, G_TYPE_OBJECT);
++
++static void cc_rr_labeler_finalize (GObject *object);
++static void setup_from_config (CcRRLabeler *labeler);
++
++static GdkFilterReturn
++screen_xevent_filter (GdkXEvent      *xevent,
++                    GdkEvent       *event,
++                    CcRRLabeler *labeler)
++{
++      XEvent *xev;
++
++      xev = (XEvent *) xevent;
++
++      if (xev->type == PropertyNotify &&
++          xev->xproperty.atom == labeler->priv->workarea_atom) {
++              /* update label positions */
++              if (labeler->priv->windows != NULL) {
++                      cc_rr_labeler_hide (labeler);
++                      cc_rr_labeler_show (labeler);
++              }
++      }
++
++      return GDK_FILTER_CONTINUE;
++}
++
++static void
++cc_rr_labeler_init (CcRRLabeler *labeler)
++{
++      GdkWindow *gdkwindow;
++
++      labeler->priv = G_TYPE_INSTANCE_GET_PRIVATE (labeler, 
GNOME_TYPE_RR_LABELER, CcRRLabelerPrivate);
++
++      labeler->priv->workarea_atom = XInternAtom (GDK_DISPLAY_XDISPLAY 
(gdk_display_get_default ()),
++                                                  "_NET_WORKAREA",
++                                                  True);
++
++      labeler->priv->screen = gdk_screen_get_default ();
++      /* code is not really designed to handle multiple screens so *shrug* */
++      gdkwindow = gdk_screen_get_root_window (labeler->priv->screen);
++      gdk_window_add_filter (gdkwindow, (GdkFilterFunc) screen_xevent_filter, 
labeler);
++      gdk_window_set_events (gdkwindow, gdk_window_get_events (gdkwindow) | 
GDK_PROPERTY_CHANGE_MASK);
++}
++
++static void
++cc_rr_labeler_set_property (GObject *gobject, guint property_id, const GValue 
*value, GParamSpec *param_spec)
++{
++      CcRRLabeler *self = CC_RR_LABELER (gobject);
++
++      switch (property_id) {
++      case PROP_CONFIG:
++              self->priv->config = GNOME_RR_CONFIG (g_value_dup_object 
(value));
++              return;
++      default:
++              G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, 
param_spec);
++      }
++}
++
++static GObject *
++cc_rr_labeler_constructor (GType type, guint n_construct_properties, 
GObjectConstructParam *construct_properties)
++{
++      CcRRLabeler *self = (CcRRLabeler*) G_OBJECT_CLASS 
(cc_rr_labeler_parent_class)->constructor (type, n_construct_properties, 
construct_properties);
++
++      setup_from_config (self);
++
++      return (GObject*) self;
++}
++
++static void
++cc_rr_labeler_class_init (CcRRLabelerClass *klass)
++{
++      GObjectClass *object_class;
++
++      g_type_class_add_private (klass, sizeof (CcRRLabelerPrivate));
++
++      object_class = (GObjectClass *) klass;
++
++      object_class->set_property = cc_rr_labeler_set_property;
++      object_class->finalize = cc_rr_labeler_finalize;
++      object_class->constructor = cc_rr_labeler_constructor;
++
++      g_object_class_install_property (object_class, PROP_CONFIG, 
g_param_spec_object ("config",
++                                                                              
         "Configuration",
++                                                                              
         "RandR configuration to label",
++                                                                              
         GNOME_TYPE_RR_CONFIG,
++                                                                              
         G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
++                                                                              
         G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
++}
++
++static void
++cc_rr_labeler_finalize (GObject *object)
++{
++      CcRRLabeler *labeler;
++      GdkWindow      *gdkwindow;
++
++      labeler = CC_RR_LABELER (object);
++
++      gdkwindow = gdk_screen_get_root_window (labeler->priv->screen);
++      gdk_window_remove_filter (gdkwindow, (GdkFilterFunc) 
screen_xevent_filter, labeler);
++
++      if (labeler->priv->config != NULL) {
++              g_object_unref (labeler->priv->config);
++      }
++
++      if (labeler->priv->windows != NULL) {
++              cc_rr_labeler_hide (labeler);
++              g_free (labeler->priv->windows);
++      }
++
++      g_free (labeler->priv->palette);
++
++      G_OBJECT_CLASS (cc_rr_labeler_parent_class)->finalize (object);
++}
++
++static int
++count_outputs (GnomeRRConfig *config)
++{
++      int i;
++      GnomeRROutputInfo **outputs = gnome_rr_config_get_outputs (config);
++
++      for (i = 0; outputs[i] != NULL; i++)
++              ;
++
++      return i;
++}
++
++static void
++make_palette (CcRRLabeler *labeler)
++{
++      /* The idea is that we go around an hue color wheel.  We want to start
++       * at red, go around to green/etc. and stop at blue --- because magenta
++       * is evil.  Eeeeek, no magenta, please!
++       *
++       * Purple would be nice, though.  Remember that we are watered down
++       * (i.e. low saturation), so that would be like Like berries with cream.
++       * Mmmmm, berries.
++       */
++      double start_hue;
++      double end_hue;
++      int i;
++
++      g_assert (labeler->priv->num_outputs > 0);
++
++      labeler->priv->palette = g_new (GdkRGBA, labeler->priv->num_outputs);
++
++      start_hue = 0.0; /* red */
++      end_hue   = 2.0/3; /* blue */
++
++      for (i = 0; i < labeler->priv->num_outputs; i++) {
++              double h, s, v;
++              double r, g, b;
++
++              h = start_hue + (end_hue - start_hue) / 
labeler->priv->num_outputs * i;
++              s = 1.0 / 3;
++              v = 1.0;
++
++              gtk_hsv_to_rgb (h, s, v, &r, &g, &b);
++
++              labeler->priv->palette[i].red   = r;
++              labeler->priv->palette[i].green = g;
++              labeler->priv->palette[i].blue  = b;
++              labeler->priv->palette[i].alpha  = 1.0;
++      }
++}
++
++static void
++rounded_rectangle (cairo_t *cr,
++                   gint     x,
++                   gint     y,
++                   gint     width,
++                   gint     height,
++                   gint     x_radius,
++                   gint     y_radius)
++{
++      gint x1, x2;
++      gint y1, y2;
++      gint xr1, xr2;
++      gint yr1, yr2;
++
++      x1 = x;
++      x2 = x1 + width;
++      y1 = y;
++      y2 = y1 + height;
++
++      x_radius = MIN (x_radius, width / 2.0);
++      y_radius = MIN (y_radius, width / 2.0);
++
++      xr1 = x_radius;
++      xr2 = x_radius / 2.0;
++      yr1 = y_radius;
++      yr2 = y_radius / 2.0;
++
++      cairo_move_to    (cr, x1 + xr1, y1);
++      cairo_line_to    (cr, x2 - xr1, y1);
++      cairo_curve_to   (cr, x2 - xr2, y1, x2, y1 + yr2, x2, y1 + yr1);
++      cairo_line_to    (cr, x2, y2 - yr1);
++      cairo_curve_to   (cr, x2, y2 - yr2, x2 - xr2, y2, x2 - xr1, y2);
++      cairo_line_to    (cr, x1 + xr1, y2);
++      cairo_curve_to   (cr, x1 + xr2, y2, x1, y2 - yr2, x1, y2 - yr1);
++      cairo_line_to    (cr, x1, y1 + yr1);
++      cairo_curve_to   (cr, x1, y1 + yr2, x1 + xr2, y1, x1 + xr1, y1);
++      cairo_close_path (cr);
++}
++
++#define LABEL_WINDOW_EDGE_THICKNESS 2
++#define LABEL_WINDOW_PADDING 12
++/* Look for panel-corner in:
++ * http://git.gnome.org/browse/gnome-shell/tree/data/theme/gnome-shell.css
++ * to match the corner radius */
++#define LABEL_CORNER_RADIUS 6 + LABEL_WINDOW_EDGE_THICKNESS
++
++static void
++label_draw_background_and_frame (GtkWidget *widget, cairo_t *cr, gboolean 
for_shape)
++{
++      GdkRGBA shape_color = { 0, 0, 0, 1 };
++      GdkRGBA *rgba;
++      GtkAllocation allocation;
++
++      rgba = g_object_get_data (G_OBJECT (widget), "rgba");
++      gtk_widget_get_allocation (widget, &allocation);
++
++      cairo_save (cr);
++      cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
++
++      /* edge outline */
++      if (for_shape)
++              gdk_cairo_set_source_rgba (cr, &shape_color);
++      else
++              cairo_set_source_rgba (cr, 0, 0, 0, 0.5);
++
++      rounded_rectangle (cr,
++                         LABEL_WINDOW_EDGE_THICKNESS / 2.0,
++                         LABEL_WINDOW_EDGE_THICKNESS / 2.0,
++                         allocation.width - LABEL_WINDOW_EDGE_THICKNESS,
++                         allocation.height - LABEL_WINDOW_EDGE_THICKNESS,
++                         LABEL_CORNER_RADIUS, LABEL_CORNER_RADIUS);
++      cairo_set_line_width (cr, LABEL_WINDOW_EDGE_THICKNESS);
++      cairo_stroke (cr);
++
++      /* fill */
++      if (for_shape) {
++              gdk_cairo_set_source_rgba (cr, &shape_color);
++      } else {
++              rgba->alpha = 0.75;
++              gdk_cairo_set_source_rgba (cr, rgba);
++      }
++
++      rounded_rectangle (cr,
++                         LABEL_WINDOW_EDGE_THICKNESS,
++                         LABEL_WINDOW_EDGE_THICKNESS,
++                         allocation.width - LABEL_WINDOW_EDGE_THICKNESS * 2,
++                         allocation.height - LABEL_WINDOW_EDGE_THICKNESS * 2,
++                         LABEL_CORNER_RADIUS - LABEL_WINDOW_EDGE_THICKNESS / 
2.0,
++                         LABEL_CORNER_RADIUS - LABEL_WINDOW_EDGE_THICKNESS / 
2.0);
++      cairo_fill (cr);
++
++      cairo_restore (cr);
++}
++
++static void
++maybe_update_shape (GtkWidget *widget)
++{
++      cairo_t *cr;
++      cairo_surface_t *surface;
++      cairo_region_t *region;
++
++      /* fallback to XShape only for non-composited clients */
++      if (gtk_widget_is_composited (widget)) {
++              gtk_widget_shape_combine_region (widget, NULL);
++              return;
++      }
++
++      surface = gdk_window_create_similar_surface (gtk_widget_get_window 
(widget),
++                                                   CAIRO_CONTENT_COLOR_ALPHA,
++                                                   
gtk_widget_get_allocated_width (widget),
++                                                   
gtk_widget_get_allocated_height (widget));
++
++      cr = cairo_create (surface);
++      label_draw_background_and_frame (widget, cr, TRUE);
++      cairo_destroy (cr);
++
++      region = gdk_cairo_region_create_from_surface (surface);
++      gtk_widget_shape_combine_region (widget, region);
++
++      cairo_surface_destroy (surface);
++      cairo_region_destroy (region);
++}
++
++static gboolean
++label_window_draw_event_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
++{
++      if (gtk_widget_is_composited (widget)) {
++              /* clear any content */
++              cairo_save (cr);
++              cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
++              cairo_set_source_rgba (cr, 0, 0, 0, 0);
++              cairo_paint (cr);
++              cairo_restore (cr);
++      }
++
++      maybe_update_shape (widget);
++      label_draw_background_and_frame (widget, cr, FALSE);
++
++      return FALSE;
++}
++
++static void
++position_window (CcRRLabeler  *labeler,
++               GtkWidget       *window,
++               int              x,
++               int              y)
++{
++      GdkRectangle    workarea;
++      GdkRectangle    monitor;
++      int             monitor_num;
++
++      monitor_num = gdk_screen_get_monitor_at_point (labeler->priv->screen, 
x, y);
++      gdk_screen_get_monitor_workarea (labeler->priv->screen, monitor_num, 
&workarea);
++      gdk_screen_get_monitor_geometry (labeler->priv->screen,
++                                         monitor_num,
++                                         &monitor);
++      gdk_rectangle_intersect (&monitor, &workarea, &workarea);
++
++      gtk_window_move (GTK_WINDOW (window), workarea.x, workarea.y);
++}
++
++static void
++label_window_realize_cb (GtkWidget *widget)
++{
++      cairo_region_t *region;
++
++      /* make the whole window ignore events */
++      region = cairo_region_create ();
++      gtk_widget_input_shape_combine_region (widget, region);
++      cairo_region_destroy (region);
++
++      maybe_update_shape (widget);
++}
++
++static void
++label_window_composited_changed_cb (GtkWidget *widget, CcRRLabeler *labeler)
++{
++      if (gtk_widget_get_realized (widget))
++              maybe_update_shape (widget);
++}
++
++static GtkWidget *
++create_label_window (CcRRLabeler *labeler, GnomeRROutputInfo *output, GdkRGBA 
*rgba)
++{
++      GtkWidget *window;
++      GtkWidget *widget;
++      char *str;
++      const char *display_name;
++      GdkRGBA black = { 0, 0, 0, 1.0 };
++      int x, y;
++      GdkScreen *screen;
++      GdkVisual *visual;
++
++      window = gtk_window_new (GTK_WINDOW_POPUP);
++      gtk_window_set_type_hint (GTK_WINDOW (window), 
GDK_WINDOW_TYPE_HINT_TOOLTIP);
++      gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
++      gtk_widget_set_app_paintable (window, TRUE);
++      screen = gtk_widget_get_screen (window);
++      visual = gdk_screen_get_rgba_visual (screen);
++
++      if (visual != NULL)
++              gtk_widget_set_visual (window, visual);
++
++      gtk_container_set_border_width (GTK_CONTAINER (window), 
LABEL_WINDOW_PADDING + LABEL_WINDOW_EDGE_THICKNESS);
++
++      /* This is semi-dangerous.  The color is part of the labeler->palette
++       * array.  Note that in cc_rr_labeler_finalize(), we are careful to
++       * free the palette only after we free the windows.
++       */
++      g_object_set_data (G_OBJECT (window), "rgba", rgba);
++
++      g_signal_connect (window, "draw",
++                        G_CALLBACK (label_window_draw_event_cb), labeler);
++      g_signal_connect (window, "realize",
++                        G_CALLBACK (label_window_realize_cb), labeler);
++      g_signal_connect (window, "composited-changed",
++                        G_CALLBACK (label_window_composited_changed_cb), 
labeler);
++
++      if (gnome_rr_config_get_clone (labeler->priv->config)) {
++              /* Keep this string in sync with 
gnome-control-center/capplets/display/xrandr-capplet.c:get_display_name() */
++
++              /* Translators:  this is the feature where what you see on your
++               * laptop's screen is the same as your external projector.
++               * Here, "Mirrored" is being used as an adjective.  For example,
++               * the Spanish translation could be "Pantallas en Espejo".
++               */
++              display_name = _("Mirrored Displays");
++      } else
++              display_name = gnome_rr_output_info_get_display_name (output);
++
++      str = g_strdup_printf ("<b>%s</b>", display_name);
++      widget = gtk_label_new (NULL);
++      gtk_label_set_markup (GTK_LABEL (widget), str);
++      g_free (str);
++
++      /* Make the label explicitly black.  We don't want it to follow the
++       * theme's colors, since the label is always shown against a light
++       * pastel background.  See bgo#556050
++       */
++      gtk_widget_override_color (widget,
++                                 gtk_widget_get_state_flags (widget),
++                                 &black);
++
++      gtk_container_add (GTK_CONTAINER (window), widget);
++
++      /* Should we center this at the top edge of the monitor, instead of 
using the upper-left corner? */
++      gnome_rr_output_info_get_geometry (output, &x, &y, NULL, NULL);
++      position_window (labeler, window, x, y);
++
++      gtk_widget_show_all (window);
++
++      return window;
++}
++
++static void
++setup_from_config (CcRRLabeler *labeler)
++{
++      labeler->priv->num_outputs = count_outputs (labeler->priv->config);
++
++      make_palette (labeler);
++
++      cc_rr_labeler_show (labeler);
++}
++
++/**
++ * cc_rr_labeler_new:
++ * @config: Configuration of the screens to label
++ *
++ * Create a GUI element that will display colored labels on each connected 
monitor.
++ * This is useful when users are required to identify which monitor is which, 
e.g. for
++ * for configuring multiple monitors.
++ * The labels will be shown by default, use cc_rr_labeler_hide to hide them.
++ *
++ * Returns: A new #CcRRLabeler
++ */
++CcRRLabeler *
++cc_rr_labeler_new (GnomeRRConfig *config)
++{
++      g_return_val_if_fail (GNOME_IS_RR_CONFIG (config), NULL);
++
++      return g_object_new (GNOME_TYPE_RR_LABELER, "config", config, NULL);
++}
++
++/**
++ * cc_rr_labeler_show:
++ * @labeler: A #CcRRLabeler
++ *
++ * Show the labels.
++ */
++void
++cc_rr_labeler_show (CcRRLabeler *labeler)
++{
++      int i;
++      gboolean created_window_for_clone;
++      GnomeRROutputInfo **outputs;
++
++      g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
++
++      if (labeler->priv->windows != NULL)
++              return;
++
++      labeler->priv->windows = g_new (GtkWidget *, 
labeler->priv->num_outputs);
++
++      created_window_for_clone = FALSE;
++
++      outputs = gnome_rr_config_get_outputs (labeler->priv->config);
++
++      for (i = 0; i < labeler->priv->num_outputs; i++) {
++              if (!created_window_for_clone && gnome_rr_output_info_is_active 
(outputs[i])) {
++                      labeler->priv->windows[i] = create_label_window 
(labeler, outputs[i], labeler->priv->palette + i);
++
++                      if (gnome_rr_config_get_clone (labeler->priv->config))
++                              created_window_for_clone = TRUE;
++              } else
++                      labeler->priv->windows[i] = NULL;
++      }
++}
++
++/**
++ * cc_rr_labeler_hide:
++ * @labeler: A #CcRRLabeler
++ *
++ * Hide ouput labels.
++ */
++void
++cc_rr_labeler_hide (CcRRLabeler *labeler)
++{
++      int i;
++      CcRRLabelerPrivate *priv;
++
++      g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
++
++      priv = labeler->priv;
++
++      if (priv->windows == NULL)
++              return;
++
++      for (i = 0; i < priv->num_outputs; i++)
++              if (priv->windows[i] != NULL) {
++                      gtk_widget_destroy (priv->windows[i]);
++                      priv->windows[i] = NULL;
++      }
++      g_free (priv->windows);
++      priv->windows = NULL;
++}
++
++/**
++ * cc_rr_labeler_get_rgba_for_output:
++ * @labeler: A #CcRRLabeler
++ * @output: Output device (i.e. monitor) to query
++ * @rgba_out: (out): Color of selected monitor.
++ *
++ * Get the color used for the label on a given output (monitor).
++ */
++void
++cc_rr_labeler_get_rgba_for_output (CcRRLabeler *labeler, GnomeRROutputInfo 
*output, GdkRGBA *rgba_out)
++{
++      int i;
++      GnomeRROutputInfo **outputs;
++
++      g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
++      g_return_if_fail (GNOME_IS_RR_OUTPUT_INFO (output));
++      g_return_if_fail (rgba_out != NULL);
++
++      outputs = gnome_rr_config_get_outputs (labeler->priv->config);
++
++      for (i = 0; i < labeler->priv->num_outputs; i++)
++              if (outputs[i] == output) {
++                      *rgba_out = labeler->priv->palette[i];
++                      return;
++              }
++
++      g_warning ("trying to get the color for unknown GnomeOutputInfo %p; 
returning magenta!", output);
++
++      rgba_out->red   = 1.0;
++      rgba_out->green = 0;
++      rgba_out->blue  = 1.0;
++      rgba_out->alpha  = 1.0;
++}
+diff -Naur cinnamon-control-center-1.7.3.orig/panels/display/cc-rr-labeler.h 
cinnamon-control-center-1.7.3/panels/display/cc-rr-labeler.h
+--- cinnamon-control-center-1.7.3.orig/panels/display/cc-rr-labeler.h  
1970-01-01 01:00:00.000000000 +0100
++++ cinnamon-control-center-1.7.3/panels/display/cc-rr-labeler.h       
2013-04-22 03:42:12.383233540 +0200
+@@ -0,0 +1,64 @@
++/* gnome-rr-labeler.h - Utility to label monitors to identify them
++ * while they are being configured.
++ *
++ * Copyright 2008, Novell, Inc.
++ *
++ * This file is part of the Gnome Library.
++ *
++ * The Gnome Library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * The Gnome Library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with the Gnome Library; see the file COPYING.LIB.  If not,
++ * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth 
Floor,
++ * Boston, MA 02110-1301, USA.
++ *
++ * Author: Federico Mena-Quintero <feder...@novell.com>
++ */
++
++#ifndef CC_RR_LABELER_H
++#define CC_RR_LABELER_H
++
++#define GNOME_DESKTOP_USE_UNSTABLE_API
++#include <libgnome-desktop/gnome-rr-config.h>
++
++#define GNOME_TYPE_RR_LABELER            (cc_rr_labeler_get_type ())
++#define CC_RR_LABELER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GNOME_TYPE_RR_LABELER, CcRRLabeler))
++#define CC_RR_LABELER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  
GNOME_TYPE_RR_LABELER, CcRRLabelerClass))
++#define GNOME_IS_RR_LABELER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GNOME_TYPE_RR_LABELER))
++#define GNOME_IS_RR_LABELER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  
GNOME_TYPE_RR_LABELER))
++#define CC_RR_LABELER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  
GNOME_TYPE_RR_LABELER, CcRRLabelerClass))
++
++typedef struct _CcRRLabeler CcRRLabeler;
++typedef struct _CcRRLabelerClass CcRRLabelerClass;
++typedef struct _CcRRLabelerPrivate CcRRLabelerPrivate;
++
++struct _CcRRLabeler {
++      GObject parent;
++
++      /*< private >*/
++      CcRRLabelerPrivate *priv;
++};
++
++struct _CcRRLabelerClass {
++      GObjectClass parent_class;
++};
++
++GType cc_rr_labeler_get_type (void);
++
++CcRRLabeler *cc_rr_labeler_new (GnomeRRConfig *config);
++
++void cc_rr_labeler_show (CcRRLabeler *labeler);
++
++void cc_rr_labeler_hide (CcRRLabeler *labeler);
++
++void cc_rr_labeler_get_rgba_for_output (CcRRLabeler *labeler, 
GnomeRROutputInfo *output, GdkRGBA *rgba_out);
++
++#endif
+diff -Naur cinnamon-control-center-1.7.3.orig/panels/display/Makefile.am 
cinnamon-control-center-1.7.3/panels/display/Makefile.am
+--- cinnamon-control-center-1.7.3.orig/panels/display/Makefile.am      
2013-04-15 16:04:38.000000000 +0200
++++ cinnamon-control-center-1.7.3/panels/display/Makefile.am   2013-04-22 
03:42:12.376566715 +0200
+@@ -19,6 +19,8 @@
+       display-module.c        \
+       cc-display-panel.c      \
+       cc-display-panel.h      \
++      cc-rr-labeler.c         \
++      cc-rr-labeler.h         \
+       scrollarea.c            \
+       scrollarea.h            \
+       $(MARSHALFILES)

Added: idle-delay.patch
===================================================================
--- idle-delay.patch                            (rev 0)
+++ idle-delay.patch    2013-04-22 03:37:28 UTC (rev 88723)
@@ -0,0 +1,63 @@
+diff -Naur cinnamon-control-center-1.7.3.orig/panels/power/cc-power-panel.c 
cinnamon-control-center-1.7.3/panels/power/cc-power-panel.c
+--- cinnamon-control-center-1.7.3.orig/panels/power/cc-power-panel.c   
2013-04-15 16:04:38.000000000 +0200
++++ cinnamon-control-center-1.7.3/panels/power/cc-power-panel.c        
2013-04-22 05:04:26.466092668 +0200
+@@ -1068,26 +1068,6 @@
+                     G_CALLBACK (combo_enum_changed_cb),
+                     self);
+ 
+-  value = g_settings_get_enum (self->priv->gsd_settings, 
"lid-close-ac-action");
+-  widget = GTK_WIDGET (gtk_builder_get_object (self->priv->builder,
+-                                               "combobox_lid_ac"));
+-  disable_unavailable_combo_items (self, GTK_COMBO_BOX (widget));
+-  set_value_for_combo (GTK_COMBO_BOX (widget), value);
+-  g_object_set_data (G_OBJECT(widget), "_gsettings_key", 
"lid-close-ac-action");
+-  g_signal_connect (widget, "changed",
+-                    G_CALLBACK (combo_enum_changed_cb),
+-                    self);
+-
+-  value = g_settings_get_enum (self->priv->gsd_settings, 
"lid-close-battery-action");
+-  widget = GTK_WIDGET (gtk_builder_get_object (self->priv->builder,
+-                                               "combobox_lid_battery"));
+-  disable_unavailable_combo_items (self, GTK_COMBO_BOX (widget));
+-  set_value_for_combo (GTK_COMBO_BOX (widget), value);
+-  g_object_set_data (G_OBJECT(widget), "_gsettings_key", 
"lid-close-battery-action");
+-  g_signal_connect (widget, "changed",
+-                    G_CALLBACK (combo_enum_changed_cb),
+-                    self);
+-
+   widget = WID (self->priv->builder, "vbox_power");
+   gtk_widget_reparent (widget, (GtkWidget *) self);
+ 
+diff -Naur cinnamon-control-center-1.7.3.orig/panels/screen/cc-screen-panel.c 
cinnamon-control-center-1.7.3/panels/screen/cc-screen-panel.c
+--- cinnamon-control-center-1.7.3.orig/panels/screen/cc-screen-panel.c 
2013-04-15 16:04:38.000000000 +0200
++++ cinnamon-control-center-1.7.3/panels/screen/cc-screen-panel.c      
2013-04-22 04:48:28.047061908 +0200
+@@ -351,9 +351,8 @@
+                       1, &value,
+                       -1);
+ 
+-  /* set both battery and ac keys */
+-  g_settings_set_int (self->priv->gsd_settings, "sleep-display-ac", value);
+-  g_settings_set_int (self->priv->gsd_settings, "sleep-display-battery", 
value);
++  /* set idle-delay key */
++  g_settings_set_int (self->priv->session_settings, "idle-delay", value);
+ 
+   set_idle_delay_from_dpms (self, value);
+ }
+@@ -399,7 +398,7 @@
+   i = 0;
+ 
+   /* try to make the UI match the AC setting */
+-  value = g_settings_get_int (self->priv->gsd_settings, "sleep-display-ac");
++  value = g_settings_get_int (self->priv->session_settings, "idle-delay");
+   do
+     {
+       gtk_tree_model_get (model, &iter,
+@@ -510,7 +509,7 @@
+   /* bind the auto dim checkbox */
+   widget = WID ("screen_auto_reduce_checkbutton");
+   g_settings_bind (self->priv->gsd_settings,
+-                   "idle-dim-battery",
++                   "idle-dim",
+                    widget, "active",
+                    G_SETTINGS_BIND_DEFAULT);
+ 

Reply via email to