1
0
forked from pool/gnome-desktop
OBS User unknown 2008-08-29 22:10:46 +00:00 committed by Git OBS Bridge
parent ee155c415f
commit c8b8092b1c
5 changed files with 21 additions and 870 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c785e6769255ae2d4aa3fb7ca76ea75c8833370ec118880a119b6688638f71d9
size 1510062

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7008dedf5f0013a2bc3ce650551174722337d88e4b24ec4f7e54874b33ebd823
size 1453715

View File

@ -1,861 +0,0 @@
diff --git a/libgnome-desktop/Makefile.am b/libgnome-desktop/Makefile.am
index f8516ca..772a918 100644
--- a/libgnome-desktop/Makefile.am
+++ b/libgnome-desktop/Makefile.am
@@ -24,6 +24,7 @@ libgnome_desktop_2_la_SOURCES = \
display-name.c \
gnome-rr.c \
gnome-rr-config.c \
+ gnome-rr-labeler.c \
edid-parse.c \
edid.h
diff --git a/libgnome-desktop/gnome-rr-config.c b/libgnome-desktop/gnome-rr-config.c
index fece456..4c21fa1 100644
--- a/libgnome-desktop/gnome-rr-config.c
+++ b/libgnome-desktop/gnome-rr-config.c
@@ -463,6 +463,7 @@ gnome_rr_config_new_current (GnomeRRScreen *screen)
int i;
int clone_width = -1;
int clone_height = -1;
+ int last_x;
g_return_val_if_fail (screen != NULL, NULL);
@@ -536,7 +537,7 @@ gnome_rr_config_new_current (GnomeRRScreen *screen)
clone_width = output->width;
clone_height = output->height;
} else if (clone_width == output->width &&
- clone_height == output->height) {
+ clone_height == output->height) {
config->clone = TRUE;
}
}
@@ -588,6 +589,34 @@ gnome_rr_config_new_current (GnomeRRScreen *screen)
config->outputs = (GnomeOutputInfo **)g_ptr_array_free (a, FALSE);
+ /* Walk the outputs computing the right-most edge of all
+ * lit-up displays
+ */
+ last_x = 0;
+ for (i = 0; config->outputs[i] != NULL; ++i)
+ {
+ GnomeOutputInfo *output = config->outputs[i];
+
+ if (output->on)
+ {
+ last_x = MAX (last_x, output->x + output->width);
+ }
+ }
+
+ /* Now position all off displays to the right of the
+ * on displays
+ */
+ for (i = 0; config->outputs[i] != NULL; ++i)
+ {
+ GnomeOutputInfo *output = config->outputs[i];
+
+ if (output->connected && !output->on)
+ {
+ output->x = last_x;
+ last_x = output->x + output->width;
+ }
+ }
+
g_assert (gnome_rr_config_match (config, config));
return config;
@@ -1025,6 +1054,8 @@ apply_configuration (GnomeRRConfig *conf, GnomeRRScreen *screen)
crtc_assignment_free (assignment);
+ gdk_flush ();
+
return TRUE;
}
@@ -1034,22 +1065,26 @@ apply_configuration (GnomeRRConfig *conf, GnomeRRScreen *screen)
gboolean
gnome_rr_config_apply_stored (GnomeRRScreen *screen)
{
- GnomeRRConfig **configs = configurations_read (NULL); /* NULL-GError */
+ GnomeRRConfig **configs;
GnomeRRConfig *current;
GnomeRRConfig *found;
gboolean result = TRUE;
if (!screen)
return FALSE;
-
+
+ configs = configurations_read (NULL); /* NULL-GError */
+
gnome_rr_screen_refresh (screen);
current = gnome_rr_config_new_current (screen);
+
if (configs)
{
if ((found = gnome_rr_config_find (configs, current)))
{
apply_configuration (found, screen);
+
result = TRUE;
}
else
@@ -1104,16 +1139,14 @@ can_clone (CrtcInfo *info,
}
static gboolean
-crtc_assignment_assign (CrtcAssignment *assign,
- GnomeRRCrtc *crtc,
- GnomeRRMode *mode,
- int x,
- int y,
- GnomeRRRotation rotation,
- GnomeRROutput *output)
+crtc_assignment_assign (CrtcAssignment *assign,
+ GnomeRRCrtc *crtc,
+ GnomeRRMode *mode,
+ int x,
+ int y,
+ GnomeRRRotation rotation,
+ GnomeRROutput *output)
{
- /* FIXME: We should reject stuff that is outside the screen ranges */
-
CrtcInfo *info = g_hash_table_lookup (assign->info, crtc);
if (!gnome_rr_crtc_can_drive_output (crtc, output) ||
@@ -1221,98 +1254,6 @@ crtc_is_rotated (GnomeRRCrtc *crtc)
return FALSE;
}
-static void
-crtc_assignment_apply (CrtcAssignment *assign)
-{
- GList *active_crtcs = g_hash_table_get_keys (assign->info);
- GnomeRRCrtc **all_crtcs = gnome_rr_screen_list_crtcs (assign->screen);
- GList *list;
- int width, height;
- int i;
- int min_width, max_width, min_height, max_height;
- int width_mm, height_mm;
-
- /* Compute size of the screen */
- width = height = 1;
- for (list = active_crtcs; list != NULL; list = list->next)
- {
- GnomeRRCrtc *crtc = list->data;
- CrtcInfo *info = g_hash_table_lookup (assign->info, crtc);
- int w, h;
-
- w = gnome_rr_mode_get_width (info->mode);
- h = gnome_rr_mode_get_height (info->mode);
-
- if (mode_is_rotated (info))
- {
- int tmp = h;
- h = w;
- w = tmp;
- }
-
- width = MAX (width, info->x + w);
- height = MAX (height, info->y + h);
- }
- g_list_free (active_crtcs);
-
- gnome_rr_screen_get_ranges (
- assign->screen, &min_width, &max_width, &min_height, &max_height);
-
- width = MAX (min_width, width);
- width = MIN (max_width, width);
- height = MAX (min_height, height);
- height = MIN (max_height, height);
-
- /* Turn off all crtcs currently displaying outside the new screen */
- for (i = 0; all_crtcs[i] != NULL; ++i)
- {
- GnomeRRCrtc *crtc = all_crtcs[i];
- GnomeRRMode *mode = gnome_rr_crtc_get_current_mode (crtc);
- int x, y;
-
- if (mode)
- {
- int w, h;
- gnome_rr_crtc_get_position (crtc, &x, &y);
-
- w = gnome_rr_mode_get_width (mode);
- h = gnome_rr_mode_get_height (mode);
-
- if (crtc_is_rotated (crtc))
- {
- int tmp = h;
- h = w;
- w = tmp;
- }
-
- if (x + w > width || y + h > height)
- gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0);
- }
- }
-
- /* Turn off all CRTC's that are not in the assignment */
- for (i = 0; all_crtcs[i] != NULL; ++i)
- {
- GnomeRRCrtc *crtc = all_crtcs[i];
-
- if (!g_hash_table_lookup (assign->info, crtc))
- gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0);
- }
-
- /* The 'physical size' of an X screen is meaningless if that screen
- * can consist of many monitors. So just pick a size that make the
- * dpi 96.
- *
- * Firefox and Evince apparently believe what X tells them.
- */
- width_mm = (width / 96.0) * 25.4 + 0.5;
- height_mm = (height / 96.0) * 25.4 + 0.5;
-
- gnome_rr_screen_set_size (assign->screen, width, height, width_mm, height_mm);
-
- g_hash_table_foreach (assign->info, configure_crtc, NULL);
-}
-
/* Check whether the given set of settings can be used
* at the same time -- ie. whether there is an assignment
* of CRTC's to outputs.
@@ -1388,6 +1329,43 @@ crtc_info_free (CrtcInfo *info)
g_free (info);
}
+static void
+get_required_virtual_size (CrtcAssignment *assign, int *width, int *height)
+{
+ GList *active_crtcs = g_hash_table_get_keys (assign->info);
+ GList *list;
+ int d;
+
+ if (!width)
+ width = &d;
+ if (!height)
+ height = &d;
+
+ /* Compute size of the screen */
+ *width = *height = 1;
+ for (list = active_crtcs; list != NULL; list = list->next)
+ {
+ GnomeRRCrtc *crtc = list->data;
+ CrtcInfo *info = g_hash_table_lookup (assign->info, crtc);
+ int w, h;
+
+ w = gnome_rr_mode_get_width (info->mode);
+ h = gnome_rr_mode_get_height (info->mode);
+
+ if (mode_is_rotated (info))
+ {
+ int tmp = h;
+ h = w;
+ w = tmp;
+ }
+
+ *width = MAX (*width, info->x + w);
+ *height = MAX (*height, info->y + h);
+ }
+
+ g_list_free (active_crtcs);
+}
+
static CrtcAssignment *
crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs)
{
@@ -1398,14 +1376,93 @@ crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs)
if (real_assign_crtcs (screen, outputs, assignment))
{
+ int width, height;
+ int min_width, max_width, min_height, max_height;
+
+ get_required_virtual_size (assignment, &width, &height);
+
+ gnome_rr_screen_get_ranges (
+ screen, &min_width, &max_width, &min_height, &max_height);
+
+ if (width < min_width || width > max_width ||
+ height < min_height || height > max_height)
+ {
+ goto fail;
+ }
+
assignment->screen = screen;
return assignment;
}
- else
- {
- crtc_assignment_free (assignment);
- return NULL;
+fail:
+ crtc_assignment_free (assignment);
+
+ return NULL;
+}
+
+static void
+crtc_assignment_apply (CrtcAssignment *assign)
+{
+ GnomeRRCrtc **all_crtcs = gnome_rr_screen_list_crtcs (assign->screen);
+ int width, height;
+ int i;
+ int min_width, max_width, min_height, max_height;
+ int width_mm, height_mm;
+
+ /* Compute size of the screen */
+ get_required_virtual_size (assign, &width, &height);
+
+ gnome_rr_screen_get_ranges (
+ assign->screen, &min_width, &max_width, &min_height, &max_height);
+
+ /* We should never get here if the dimensions don't fit in the virtual size,
+ * but just in case we do, fix it up.
+ */
+ width = MAX (min_width, width);
+ width = MIN (max_width, width);
+ height = MAX (min_height, height);
+ height = MIN (max_height, height);
+
+ /* Turn off all crtcs that are currently displaying outside the new screen,
+ * or are not used in the new setup
+ */
+ for (i = 0; all_crtcs[i] != NULL; ++i)
+ {
+ GnomeRRCrtc *crtc = all_crtcs[i];
+ GnomeRRMode *mode = gnome_rr_crtc_get_current_mode (crtc);
+ int x, y;
+
+ if (mode)
+ {
+ int w, h;
+ gnome_rr_crtc_get_position (crtc, &x, &y);
+
+ w = gnome_rr_mode_get_width (mode);
+ h = gnome_rr_mode_get_height (mode);
+
+ if (crtc_is_rotated (crtc))
+ {
+ int tmp = h;
+ h = w;
+ w = tmp;
+ }
+
+ if (x + w > width || y + h > height || !g_hash_table_lookup (assign->info, crtc))
+ gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0);
+ }
}
+
+ /* The 'physical size' of an X screen is meaningless if that screen
+ * can consist of many monitors. So just pick a size that make the
+ * dpi 96.
+ *
+ * Firefox and Evince apparently believe what X tells them.
+ */
+ width_mm = (width / 96.0) * 25.4 + 0.5;
+ height_mm = (height / 96.0) * 25.4 + 0.5;
+
+ gnome_rr_screen_set_size (assign->screen, width, height, width_mm, height_mm);
+
+ g_hash_table_foreach (assign->info, configure_crtc, NULL);
}
diff --git a/libgnome-desktop/gnome-rr-labeler.c b/libgnome-desktop/gnome-rr-labeler.c
new file mode 100644
index 0000000..a12caec
--- /dev/null
+++ b/libgnome-desktop/gnome-rr-labeler.c
@@ -0,0 +1,366 @@
+/* gnome-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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Federico Mena-Quintero <federico@novell.com>
+ */
+
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+
+#include <config.h>
+#include "libgnomeui/gnome-rr-labeler.h"
+#include <gtk/gtk.h>
+
+struct _GnomeRRLabeler {
+ GObject parent;
+
+ GnomeRRConfig *config;
+
+ int num_outputs;
+
+ GdkColor *palette;
+ GtkWidget **windows;
+};
+
+struct _GnomeRRLabelerClass {
+ GObjectClass parent_class;
+};
+
+G_DEFINE_TYPE (GnomeRRLabeler, gnome_rr_labeler, G_TYPE_OBJECT);
+
+static void gnome_rr_labeler_finalize (GObject *object);
+
+static void
+gnome_rr_labeler_init (GnomeRRLabeler *labeler)
+{
+ /* nothing */
+}
+
+static void
+gnome_rr_labeler_class_init (GnomeRRLabelerClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = (GObjectClass *) class;
+
+ object_class->finalize = gnome_rr_labeler_finalize;
+}
+
+static void
+gnome_rr_labeler_finalize (GObject *object)
+{
+ GnomeRRLabeler *labeler;
+
+ labeler = GNOME_RR_LABELER (object);
+
+ /* We don't destroy the labeler->config (a GnomeRRConfig*) here; let our
+ * caller do that instead.
+ */
+
+ if (labeler->windows != NULL) {
+ gnome_rr_labeler_hide (labeler);
+ g_free (labeler->windows);
+ labeler->windows = NULL;
+ }
+
+ g_free (labeler->palette);
+ labeler->palette = NULL;
+
+ G_OBJECT_CLASS (gnome_rr_labeler_parent_class)->finalize (object);
+}
+
+static int
+count_outputs (GnomeRRConfig *config)
+{
+ int i;
+
+ for (i = 0; config->outputs[i] != NULL; i++)
+ ;
+
+ return i;
+}
+
+/* hsv_to_rgb() stolen from gtk+/gtk/gtkhsv.c, sigh. */
+
+#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11)
+
+/* Converts from HSV to RGB */
+static void
+hsv_to_rgb (gdouble *h,
+ gdouble *s,
+ gdouble *v)
+{
+ gdouble hue, saturation, value;
+ gdouble f, p, q, t;
+
+ if (*s == 0.0)
+ {
+ *h = *v;
+ *s = *v;
+ *v = *v; /* heh */
+ }
+ else
+ {
+ hue = *h * 6.0;
+ saturation = *s;
+ value = *v;
+
+ if (hue == 6.0)
+ hue = 0.0;
+
+ f = hue - (int) hue;
+ p = value * (1.0 - saturation);
+ q = value * (1.0 - saturation * f);
+ t = value * (1.0 - saturation * (1.0 - f));
+
+ switch ((int) hue)
+ {
+ case 0:
+ *h = value;
+ *s = t;
+ *v = p;
+ break;
+
+ case 1:
+ *h = q;
+ *s = value;
+ *v = p;
+ break;
+
+ case 2:
+ *h = p;
+ *s = value;
+ *v = t;
+ break;
+
+ case 3:
+ *h = p;
+ *s = q;
+ *v = value;
+ break;
+
+ case 4:
+ *h = t;
+ *s = p;
+ *v = value;
+ break;
+
+ case 5:
+ *h = value;
+ *s = p;
+ *v = q;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+ }
+}
+
+static void
+make_palette (GnomeRRLabeler *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->num_outputs > 0);
+
+ labeler->palette = g_new (GdkColor, labeler->num_outputs);
+
+ start_hue = 0.0; /* red */
+ end_hue = 2.0/3; /* blue */
+
+ for (i = 0; i < labeler->num_outputs; i++) {
+ double h, s, v;
+
+ h = start_hue + (end_hue - start_hue) / labeler->num_outputs * i;
+ s = 1.0 / 3;
+ v = 1.0;
+
+ hsv_to_rgb (&h, &s, &v);
+
+ labeler->palette[i].red = (int) (65535 * h + 0.5);
+ labeler->palette[i].green = (int) (65535 * s + 0.5);
+ labeler->palette[i].blue = (int) (65535 * v + 0.5);
+ }
+}
+
+#define LABEL_WINDOW_EDGE_THICKNESS 2
+#define LABEL_WINDOW_PADDING 12
+
+static gboolean
+label_window_expose_event_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+ cairo_t *cr;
+ GdkColor *color;
+
+ color = g_object_get_data (G_OBJECT (widget), "color");
+
+ cr = gdk_cairo_create (widget->window);
+
+ /* edge outline */
+
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_rectangle (cr,
+ LABEL_WINDOW_EDGE_THICKNESS / 2.0,
+ LABEL_WINDOW_EDGE_THICKNESS / 2.0,
+ widget->allocation.width - LABEL_WINDOW_EDGE_THICKNESS,
+ widget->allocation.height - LABEL_WINDOW_EDGE_THICKNESS);
+ cairo_set_line_width (cr, LABEL_WINDOW_EDGE_THICKNESS);
+ cairo_stroke (cr);
+
+ /* fill */
+
+ gdk_cairo_set_source_color (cr, color);
+ cairo_rectangle (cr,
+ LABEL_WINDOW_EDGE_THICKNESS,
+ LABEL_WINDOW_EDGE_THICKNESS,
+ widget->allocation.width - LABEL_WINDOW_EDGE_THICKNESS * 2,
+ widget->allocation.height - LABEL_WINDOW_EDGE_THICKNESS * 2);
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static GtkWidget *
+create_label_window (GnomeRRLabeler *labeler, GnomeOutputInfo *output, GdkColor *color)
+{
+ GtkWidget *window;
+ GtkWidget *widget;
+ char *str;
+
+ window = gtk_window_new (GTK_WINDOW_POPUP);
+ GTK_WIDGET_SET_FLAGS (window, GTK_APP_PAINTABLE);
+
+ 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 gnome_rr_labeler_finalize(), we are careful to
+ * free the palette only after we free the windows.
+ */
+ g_object_set_data (G_OBJECT (window), "color", color);
+
+ g_signal_connect (window, "expose-event",
+ G_CALLBACK (label_window_expose_event_cb), labeler);
+
+ str = g_strdup_printf ("<b>%s</b>", output->display_name);
+ widget = gtk_label_new (NULL);
+ gtk_label_set_markup (GTK_LABEL (widget), str);
+ g_free (str);
+
+ 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? */
+ gtk_window_move (GTK_WINDOW (window), output->x, output->y);
+
+ gtk_widget_show_all (window);
+
+ return window;
+}
+
+static void
+create_label_windows (GnomeRRLabeler *labeler)
+{
+ int i;
+
+ /* FIXME: this doesn't handle cloned outputs yet */
+
+ labeler->windows = g_new (GtkWidget *, labeler->num_outputs);
+
+ for (i = 0; i < labeler->num_outputs; i++) {
+ if (labeler->config->outputs[i]->on) {
+ labeler->windows[i] = create_label_window (labeler, labeler->config->outputs[i], labeler->palette + i);
+ } else
+ labeler->windows[i] = NULL;
+ }
+}
+
+static void
+setup_from_config (GnomeRRLabeler *labeler)
+{
+ labeler->num_outputs = count_outputs (labeler->config);
+
+ make_palette (labeler);
+
+ create_label_windows (labeler);
+}
+
+GnomeRRLabeler *
+gnome_rr_labeler_new (GnomeRRConfig *config)
+{
+ GnomeRRLabeler *labeler;
+
+ g_return_val_if_fail (config != NULL, NULL);
+
+ labeler = g_object_new (GNOME_TYPE_RR_LABELER, NULL);
+ labeler->config = config;
+
+ setup_from_config (labeler);
+
+ return labeler;
+}
+
+void
+gnome_rr_labeler_hide (GnomeRRLabeler *labeler)
+{
+ int i;
+
+ g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
+
+ for (i = 0; i < labeler->num_outputs; i++)
+ if (labeler->windows[i] != NULL) {
+ gtk_widget_destroy (labeler->windows[i]);
+ labeler->windows[i] = NULL;
+ }
+}
+
+void
+gnome_rr_labeler_get_color_for_output (GnomeRRLabeler *labeler, GnomeOutputInfo *output, GdkColor *color_out)
+{
+ int i;
+
+ g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
+ g_return_if_fail (output != NULL);
+ g_return_if_fail (color_out != NULL);
+
+ for (i = 0; i < labeler->num_outputs; i++)
+ if (labeler->config->outputs[i] == output) {
+ *color_out = labeler->palette[i];
+ return;
+ }
+
+ g_warning ("trying to get the color for unknown GnomeOutputInfo %p; returning magenta!", output);
+
+ color_out->red = 0xffff;
+ color_out->green = 0;
+ color_out->blue = 0xffff;
+}
diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c
index bd507c7..ccbfe0d 100644
--- a/libgnome-desktop/gnome-rr.c
+++ b/libgnome-desktop/gnome-rr.c
@@ -440,8 +440,10 @@ gnome_rr_screen_new (GdkScreen *gdk_screen,
screen->info = screen_info_new (screen);
- if (!screen->info)
+ if (!screen->info) {
+ g_free (screen);
return NULL;
+ }
XRRSelectInput (screen->xdisplay,
screen->xroot,
@@ -462,6 +464,19 @@ gnome_rr_screen_new (GdkScreen *gdk_screen,
}
void
+gnome_rr_screen_destroy (GnomeRRScreen *screen)
+{
+ g_return_if_fail (screen != NULL);
+
+ gdk_window_remove_filter (screen->gdk_root, screen_on_event, screen);
+
+ screen_info_free (screen->info);
+ screen->info = NULL;
+
+ g_free (screen);
+}
+
+void
gnome_rr_screen_set_size (GnomeRRScreen *screen,
int width,
int height,
diff --git a/libgnome-desktop/libgnomeui/Makefile.am b/libgnome-desktop/libgnomeui/Makefile.am
index eb5b510..195bad2 100644
--- a/libgnome-desktop/libgnomeui/Makefile.am
+++ b/libgnome-desktop/libgnomeui/Makefile.am
@@ -4,4 +4,5 @@ libgnomeui_desktop_HEADERS = \
gnome-hint.h \
gnome-bg.h \
gnome-rr.h \
- gnome-rr-config.h
+ gnome-rr-config.h \
+ gnome-rr-labeler.h
diff --git a/libgnome-desktop/libgnomeui/gnome-rr-labeler.h b/libgnome-desktop/libgnomeui/gnome-rr-labeler.h
new file mode 100644
index 0000000..5b751cc
--- /dev/null
+++ b/libgnome-desktop/libgnomeui/gnome-rr-labeler.h
@@ -0,0 +1,53 @@
+/* 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Federico Mena-Quintero <federico@novell.com>
+ */
+
+#ifndef GNOME_RR_LABELER_H
+#define GNOME_RR_LABELER_H
+
+#ifndef GNOME_DESKTOP_USE_UNSTABLE_API
+#error GnomeRR is unstable API. You must define GNOME_DESKTOP_USE_UNSTABLE_API before including gnomerr.h
+#endif
+
+#include <libgnomeui/gnome-rr-config.h>
+
+#define GNOME_TYPE_RR_LABELER (gnome_rr_labeler_get_type ())
+#define GNOME_RR_LABELER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNOME_TYPE_RR_LABELER, GnomeRRLabeler))
+#define GNOME_RR_LABELER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNOME_TYPE_RR_LABELER, GnomeRRLabelerClass))
+#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 GNOME_RR_LABELER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNOME_TYPE_RR_LABELER, GnomeRRLabelerClass))
+
+typedef struct _GnomeRRLabeler GnomeRRLabeler;
+typedef struct _GnomeRRLabelerClass GnomeRRLabelerClass;
+
+GType gnome_rr_labeler_get_type (void);
+
+GnomeRRLabeler *gnome_rr_labeler_new (GnomeRRConfig *config);
+
+void gnome_rr_labeler_hide (GnomeRRLabeler *labeler);
+
+void gnome_rr_labeler_get_color_for_output (GnomeRRLabeler *labeler, GnomeOutputInfo *output, GdkColor *color_out);
+
+#endif
diff --git a/libgnome-desktop/libgnomeui/gnome-rr.h b/libgnome-desktop/libgnomeui/gnome-rr.h
index 5dffc01..01b4f45 100644
--- a/libgnome-desktop/libgnomeui/gnome-rr.h
+++ b/libgnome-desktop/libgnomeui/gnome-rr.h
@@ -52,6 +52,7 @@ typedef enum
GnomeRRScreen * gnome_rr_screen_new (GdkScreen *screen,
GnomeRRScreenChanged callback,
gpointer data);
+void gnome_rr_screen_destroy (GnomeRRScreen *screen);
GnomeRROutput **gnome_rr_screen_list_outputs (GnomeRRScreen *screen);
GnomeRRCrtc ** gnome_rr_screen_list_crtcs (GnomeRRScreen *screen);
GnomeRRMode ** gnome_rr_screen_list_modes (GnomeRRScreen *screen);

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Fri Aug 29 17:45:10 CEST 2008 - maw@suse.de
- Update to version 2.23.90:
+ Add support for randr monitor labling (so drop
gnome-desktop-randr-monitor-labeling.diff, which previously
implemented this but now is upstream)
+ Updated translations.
-------------------------------------------------------------------
Fri Aug 15 18:16:06 CEST 2008 - federico@novell.com

View File

@ -1,5 +1,5 @@
#
# spec file for package gnome-desktop (Version 2.23.6)
# spec file for package gnome-desktop (Version 2.23.90)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@ -23,8 +23,8 @@ BuildRequires: fdupes gnome-common gnome-doc-utils gnome-doc-utils-devel gtk-do
License: GNU Free Documentation License, Version 1.1 (GFDL 1.1); GPL v2 or later; LGPL v2.1 or later
Group: System/GUI/GNOME
Obsoletes: gnome-core
Version: 2.23.6
Release: 3
Version: 2.23.90
Release: 1
Summary: The GNOME Desktop API Library
Source: %{name}-%{version}.tar.bz2
Url: http://www.gnome.org
@ -36,8 +36,6 @@ Patch2: gnome-desktop-desktop.patch
Patch3: gnome-desktop-recently-used-apps.patch
# PATCH-FEATURE-OPENSUSE gnome-desktop-fate300461-desktop-gettext.patch fate300461 vuntz@novell.com -- Look for translation of desktop entry strings via gettext
Patch5: gnome-desktop-fate300461-desktop-gettext.patch
# PATCH-FEATURE-UPSTREAM gnome-desktop-randr-monitor-labeling.diff fate304764 federico@novell.com - Label physical monitors while settings their RANDR configuration
Patch6: gnome-desktop-randr-monitor-labeling.diff
Requires: %{name}-lang = %{version}
Requires: libgnome-desktop-2-7 = %{version}
@ -133,7 +131,6 @@ Authors:
%patch2 -p0
%patch3 -p1
%patch5 -p1
%patch6 -p1
%build
autoreconf -f -i
@ -192,6 +189,12 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/gtk-doc/html/gnome-desktop
%changelog
* Fri Aug 29 2008 maw@suse.de
- Update to version 2.23.90:
+ Add support for randr monitor labling (so drop
gnome-desktop-randr-monitor-labeling.diff, which previously
implemented this but now is upstream)
+ Updated translations.
* Fri Aug 15 2008 federico@novell.com
- Added gnome-desktop-randr-monitor-labeling.diff. This implements an
API to label physical monitors while their RANDR options are being