--- gnome-desktop-2.22.2.orig/debian/patches/103_gd-xrandr-xerror-check.patch +++ gnome-desktop-2.22.2/debian/patches/103_gd-xrandr-xerror-check.patch @@ -0,0 +1,59 @@ +diff -Nurp gnome-desktop-2.22.0-patched/libgnome-desktop/monitor-db.c gnome-desktop-2.22.0-working/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.0-patched/libgnome-desktop/monitor-db.c 2008-03-17 11:04:17.000000000 -0700 ++++ gnome-desktop-2.22.0-working/libgnome-desktop/monitor-db.c 2008-03-17 14:49:59.000000000 -0700 +@@ -780,6 +780,11 @@ configuration_apply_stored (RWScreen *sc + Configuration *found; + gboolean result; + ++ if (!screen) { ++ g_print("No valid screens to apply stored configuration\n"); ++ return FALSE; ++ } ++ + rw_screen_refresh (screen); + + current = configuration_new_current (screen); +diff -Nurp gnome-desktop-2.22.0-patched/libgnome-desktop/randrwrap.c gnome-desktop-2.22.0-working/libgnome-desktop/randrwrap.c +--- gnome-desktop-2.22.0-patched/libgnome-desktop/randrwrap.c 2008-03-17 11:04:17.000000000 -0700 ++++ gnome-desktop-2.22.0-working/libgnome-desktop/randrwrap.c 2008-03-17 15:53:03.000000000 -0700 +@@ -200,11 +200,25 @@ fill_out_screen_info (Display *xdisplay, + { + XRRScreenResources *resources; + +- XRRGetScreenSizeRange (xdisplay, xroot, +- &(info->min_width), +- &(info->min_height), +- &(info->max_width), +- &(info->max_height)); ++ gdk_error_trap_push (); ++ ++ if (!XRRGetScreenSizeRange (xdisplay, xroot, ++ &(info->min_width), ++ &(info->min_height), ++ &(info->max_width), ++ &(info->max_height))) { ++ /* XRR caught an error */ ++ g_print("Error: X was unable to determine screen size range for window %d\n", xroot); ++ return False; ++ } ++ ++ gdk_flush (); ++ if (gdk_error_trap_pop ()) ++ { ++ /* Unhandled X Error was generated */ ++ g_print("Error: X Error received when attempting to get screen size range for window %d\n", xroot); ++ return False; ++ } + + #if 0 + g_print ("ranges: %d - %d; %d - %d\n", +@@ -364,6 +378,9 @@ screen_on_event (GdkXEvent *xevent, + return GDK_FILTER_CONTINUE; + } + ++/* Returns NULL if screen could not be created. For instance, if driver ++ * does not support Xrandr 1.2. ++ */ + RWScreen * + rw_screen_new (GdkScreen *gdk_screen, + RWScreenChanged callback, --- gnome-desktop-2.22.2.orig/debian/patches/108_gd-randr-remove-prints.patch +++ gnome-desktop-2.22.2/debian/patches/108_gd-randr-remove-prints.patch @@ -0,0 +1,142 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.1/libgnome-desktop/monitor-db.c gnome-desktop-2.22.1.new/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.1/libgnome-desktop/monitor-db.c 2008-04-15 11:27:01.000000000 +0100 ++++ gnome-desktop-2.22.1.new/libgnome-desktop/monitor-db.c 2008-04-15 11:27:02.000000000 +0100 +@@ -919,7 +919,7 @@ + CrtcAssignment *assignment; + Output **outputs; + +- g_print ("applying configuration. Clone: %s\n", yes_no (conf->clone)); ++ //g_print ("applying configuration. Clone: %s\n", yes_no (conf->clone)); + + outputs = make_outputs (conf); + +@@ -937,7 +937,7 @@ + } + else + { +- g_print (" ... no assignment found\n"); ++ //g_print (" ... no assignment found\n"); + } + + return FALSE; +@@ -956,7 +956,7 @@ + return FALSE; + } + +- g_print ("Reading config file %s\n", get_onetime_filename()); ++ //g_print ("Reading config file %s\n", get_onetime_filename()); + configs = configurations_read (get_onetime_filename(), NULL); + if ( ! configs ) { + /* No monitors-onetime.xml file, so try monitors.xml */ +@@ -1116,12 +1116,13 @@ + RWCrtc *crtc = key; + CrtcInfo *info = value; + +- g_print ("Configuring crtc %x with ", rw_crtc_get_id (crtc)); ++ //g_print ("Configuring crtc %x with ", rw_crtc_get_id (crtc)); + + if (info->mode) + { + int n_outputs = info->outputs->len; + ++#if 0 + g_print ("mode %x, %d outputs (%d %d %d %d), and rotation %d ", + rw_mode_get_id (info->mode), + n_outputs, +@@ -1129,10 +1130,11 @@ + rw_mode_get_width (info->mode), + rw_mode_get_height (info->mode), + info->rotation); ++#endif + } + else + { +- g_print ("no mode "); ++ //g_print ("no mode "); + } + + if (rw_crtc_set_config (crtc, +@@ -1142,11 +1144,11 @@ + (RWOutput **)info->outputs->pdata, + info->outputs->len)) + { +- g_print ("succeeded\n"); ++ //g_print ("succeeded\n"); + } + else + { +- g_print ("failed\n"); ++ //g_print ("failed\n"); + } + } + +@@ -1156,7 +1158,7 @@ + if ((info->rotation & RW_ROTATION_270) || + (info->rotation & RW_ROTATION_90)) + { +- g_print ("rotated: %d\n", info->rotation); ++ //g_print ("rotated: %d\n", info->rotation); + return TRUE; + } + return FALSE; +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.1/libgnome-desktop/randrwrap.c gnome-desktop-2.22.1.new/libgnome-desktop/randrwrap.c +--- gnome-desktop-2.22.1/libgnome-desktop/randrwrap.c 2008-04-15 11:27:01.000000000 +0100 ++++ gnome-desktop-2.22.1.new/libgnome-desktop/randrwrap.c 2008-04-15 11:27:02.000000000 +0100 +@@ -626,7 +626,7 @@ + GPtrArray *a; + int i; + +- g_print ("Output %lx Timestamp: %u\n", output->id, (guint32)info->timestamp); ++ //g_print ("Output %lx Timestamp: %u\n", output->id, (guint32)info->timestamp); + + if (!info || !output->info) + { +@@ -1024,7 +1024,7 @@ + GPtrArray *a; + int i; + +- g_print ("CRTC %lx Timestamp: %u\n", crtc->id, (guint32)info->timestamp); ++ //g_print ("CRTC %lx Timestamp: %u\n", crtc->id, (guint32)info->timestamp); + + if (!info) + { +@@ -1141,7 +1141,7 @@ + static void + on_screen_changed (RWScreen *screen, gpointer data) + { +- g_print ("Changed\n"); ++ //g_print ("Changed\n"); + } + + static gboolean +@@ -1169,6 +1169,7 @@ + { + RWCrtc *crtc = screen->info->crtcs[i]; + ++#if 0 + if (crtc->current_mode) + { + g_print ("CRTC %p: (%d %d %d %d)\n", +@@ -1179,12 +1180,14 @@ + { + g_print ("CRTC %p: turned off\n", crtc); + } ++#endif + } + + for (i = 0; screen->info->outputs[i]; ++i) + { + RWOutput *output = screen->info->outputs[i]; + ++#if 0 + g_print ("Output %s currently", output->name); + + if (!output->current_crtc) +@@ -1192,6 +1195,7 @@ + else + g_print (" driven by CRTC %p\n", output->current_crtc); + } ++#endif + + g_timeout_add (500, do_refresh, screen); + --- gnome-desktop-2.22.2.orig/debian/patches/109_gd-randr-fix-clone.patch +++ gnome-desktop-2.22.2/debian/patches/109_gd-randr-fix-clone.patch @@ -0,0 +1,39 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.1/libgnome-desktop/monitor-db.c gnome-desktop-2.22.1.new/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.1/libgnome-desktop/monitor-db.c 2008-04-17 12:55:04.000000000 +0100 ++++ gnome-desktop-2.22.1.new/libgnome-desktop/monitor-db.c 2008-04-17 13:06:12.000000000 +0100 +@@ -355,7 +356,7 @@ + + rw_outputs = rw_screen_list_outputs (screen); + +- config->clone = TRUE; ++ config->clone = FALSE; + + for (i = 0; rw_outputs[i] != NULL; ++i) + { +@@ -418,18 +420,14 @@ + output->rate = rw_mode_get_freq (mode); + output->rotation = rw_crtc_get_current_rotation (crtc); + +- if (output->x != 0 || output->y != 0) +- config->clone = FALSE; +- +- if (clone_width == -1) +- { +- clone_width = output->width; +- clone_height = output->height; +- } +- else if (clone_width != output->width || +- clone_height != output->height) +- { +- config->clone = FALSE; ++ if (output->x == 0 && output->y == 0) { ++ if (clone_width == -1) { ++ clone_width = output->width; ++ clone_height = output->height; ++ } else if (clone_width == output->width && ++ clone_height == output->height) { ++ config->clone = TRUE; ++ } + } + } + else --- gnome-desktop-2.22.2.orig/debian/patches/101_gd-randr-makefiles.patch +++ gnome-desktop-2.22.2/debian/patches/101_gd-randr-makefiles.patch @@ -0,0 +1,90 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.0/libgnome-desktop/libgnomeui/Makefile.am gnome-desktop-2.22.0.new/libgnome-desktop/libgnomeui/Makefile.am +--- gnome-desktop-2.22.0/libgnome-desktop/libgnomeui/Makefile.am 2008-03-10 21:44:42.000000000 +0100 ++++ gnome-desktop-2.22.0.new/libgnome-desktop/libgnomeui/Makefile.am 2008-04-07 13:28:38.000000000 +0200 +@@ -2,4 +2,6 @@ + libgnomeui_desktop_HEADERS = \ + gnome-ditem-edit.h \ + gnome-hint.h \ +- gnome-bg.h ++ gnome-bg.h \ ++ monitor-db.h \ ++ randrwrap.h +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.0/libgnome-desktop/libgnomeui/Makefile.in gnome-desktop-2.22.0.new/libgnome-desktop/libgnomeui/Makefile.in +--- gnome-desktop-2.22.0/libgnome-desktop/libgnomeui/Makefile.in 2008-03-10 22:03:21.000000000 +0100 ++++ gnome-desktop-2.22.0.new/libgnome-desktop/libgnomeui/Makefile.in 2008-04-07 13:28:38.000000000 +0200 +@@ -259,7 +259,9 @@ + libgnomeui_desktop_HEADERS = \ + gnome-ditem-edit.h \ + gnome-hint.h \ +- gnome-bg.h ++ gnome-bg.h \ ++ monitor-db.h \ ++ randrwrap.h + + all: all-am + +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.0/libgnome-desktop/Makefile.am gnome-desktop-2.22.0.new/libgnome-desktop/Makefile.am +--- gnome-desktop-2.22.0/libgnome-desktop/Makefile.am 2008-03-10 21:44:42.000000000 +0100 ++++ gnome-desktop-2.22.0.new/libgnome-desktop/Makefile.am 2008-04-07 13:29:43.000000000 +0200 +@@ -20,7 +20,12 @@ + gnome-desktop-item.c \ + gnome-ditem-edit.c \ + gnome-hint.c \ +- gnome-bg.c ++ gnome-bg.c \ ++ display-name.c \ ++ edid.h \ ++ edid-parse.c \ ++ monitor-db.c \ ++ randrwrap.c + + libgnome_desktop_2_la_LIBADD = \ + $(XLIB_LIBS) \ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.0/libgnome-desktop/Makefile.in gnome-desktop-2.22.0.new/libgnome-desktop/Makefile.in +--- gnome-desktop-2.22.0/libgnome-desktop/Makefile.in 2008-03-10 22:03:21.000000000 +0100 ++++ gnome-desktop-2.22.0.new/libgnome-desktop/Makefile.in 2008-04-07 13:30:44.000000000 +0200 +@@ -63,7 +63,8 @@ + libgnome_desktop_2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) + am_libgnome_desktop_2_la_OBJECTS = gnome-desktop-item.lo \ +- gnome-ditem-edit.lo gnome-hint.lo gnome-bg.lo ++ gnome-ditem-edit.lo gnome-hint.lo gnome-bg.lo display-name.lo \ ++ edid-parse.lo monitor-db.lo randrwrap.lo + libgnome_desktop_2_la_OBJECTS = $(am_libgnome_desktop_2_la_OBJECTS) + libgnome_desktop_2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ +@@ -327,11 +328,17 @@ + gnome-desktop-item.c \ + gnome-ditem-edit.c \ + gnome-hint.c \ +- gnome-bg.c ++ gnome-bg.c \ ++ display-name.c \ ++ edid.h \ ++ edid-parse.c \ ++ monitor-db.c \ ++ randrwrap.c + + libgnome_desktop_2_la_LIBADD = \ + $(XLIB_LIBS) \ +- $(GNOME_DESKTOP_LIBS) ++ $(GNOME_DESKTOP_LIBS) \ ++ -lXrandr + + libgnome_desktop_2_la_LDFLAGS = \ + -version-info $(LT_VERSION) \ +@@ -454,10 +461,14 @@ + distclean-compile: + -rm -f *.tab.c + ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display-name.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edid-parse.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnome-bg.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnome-desktop-item.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnome-ditem-edit.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnome-hint.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor-db.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randrwrap.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ditem-edit.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ditem.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-hint.Po@am__quote@ --- gnome-desktop-2.22.2.orig/debian/patches/107_gd-randr-handle-unparseable-edid.patch +++ gnome-desktop-2.22.2/debian/patches/107_gd-randr-handle-unparseable-edid.patch @@ -0,0 +1,24 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.1/libgnome-desktop/monitor-db.c gnome-desktop-2.22.1.new/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.1/libgnome-desktop/monitor-db.c 2008-04-14 19:59:22.000000000 +0100 ++++ gnome-desktop-2.22.1.new/libgnome-desktop/monitor-db.c 2008-04-14 19:59:22.000000000 +0100 +@@ -382,9 +382,10 @@ + MonitorInfo *info = NULL; + + if (edid_data) +- { + info = decode_edid (edid_data); + ++ if (info) { ++ + memcpy (output->vendor, info->manufacturer_code, + sizeof (output->vendor)); + +@@ -610,6 +611,8 @@ + { + int i; + ++ g_return_val_if_fail(config != NULL, NULL); ++ + for (i = 0; config->outputs[i] != NULL; ++i) + { + Output *output = config->outputs[i]; --- gnome-desktop-2.22.2.orig/debian/patches/100_gd-add-randr-12.patch +++ gnome-desktop-2.22.2/debian/patches/100_gd-add-randr-12.patch @@ -0,0 +1,3604 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/display-name.c gnome-desktop-2.22.2.new/libgnome-desktop/display-name.c +--- gnome-desktop-2.22.2/libgnome-desktop/display-name.c 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/display-name.c 2008-05-26 22:39:11.000000000 +0200 +@@ -0,0 +1,252 @@ ++/* ++ * Copyright 2007 Red Hat, Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * on the rights to use, copy, modify, merge, publish, distribute, sub ++ * license, and/or sell copies of the Software, and to permit persons to whom ++ * the Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER ++ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/* Author: Soren Sandmann */ ++ ++#include ++#include ++#include ++#include ++#include ++#include "edid.h" ++ ++typedef struct Vendor Vendor; ++struct Vendor ++{ ++ const char vendor_id[4]; ++ const char vendor_name[28]; ++}; ++ ++/* This list of vendor codes derived from lshw ++ * ++ * http://ezix.org/project/wiki/HardwareLiSter ++ */ ++static const struct Vendor vendors[] = ++{ ++ { "AIC", "AG Neovo" }, ++ { "ACR", "Acer" }, ++ { "DEL", "DELL" }, ++ { "SAM", "SAMSUNG" }, ++ { "SNY", "SONY" }, ++ { "SEC", "Epson" }, ++ { "WAC", "Wacom" }, ++ { "NEC", "NEC" }, ++ { "CMO", "CMO" }, /* Chi Mei */ ++ { "BNQ", "BenQ" }, ++ ++ { "ABP", "Advansys" }, ++ { "ACC", "Accton" }, ++ { "ACE", "Accton" }, ++ { "ADP", "Adaptec" }, ++ { "ADV", "AMD" }, ++ { "AIR", "AIR" }, ++ { "AMI", "AMI" }, ++ { "ASU", "ASUS" }, ++ { "ATI", "ATI" }, ++ { "ATK", "Allied Telesyn" }, ++ { "AZT", "Aztech" }, ++ { "BAN", "Banya" }, ++ { "BRI", "Boca Research" }, ++ { "BUS", "Buslogic" }, ++ { "CCI", "Cache Computers Inc." }, ++ { "CHA", "Chase" }, ++ { "CMD", "CMD Technology, Inc." }, ++ { "COG", "Cogent" }, ++ { "CPQ", "Compaq" }, ++ { "CRS", "Crescendo" }, ++ { "CSC", "Crystal" }, ++ { "CSI", "CSI" }, ++ { "CTL", "Creative Labs" }, ++ { "DBI", "Digi" }, ++ { "DEC", "Digital Equipment" }, ++ { "DBK", "Databook" }, ++ { "EGL", "Eagle Technology" }, ++ { "ELS", "ELSA" }, ++ { "ESS", "ESS" }, ++ { "FAR", "Farallon" }, ++ { "FDC", "Future Domain" }, ++ { "HWP", "Hewlett-Packard" }, ++ { "IBM", "IBM" }, ++ { "INT", "Intel" }, ++ { "ISA", "Iomega" }, ++ { "MDG", "Madge" }, ++ { "MDY", "Microdyne" }, ++ { "MET", "Metheus" }, ++ { "MIC", "Micronics" }, ++ { "MLX", "Mylex" }, ++ { "NVL", "Novell" }, ++ { "OLC", "Olicom" }, ++ { "PRO", "Proteon" }, ++ { "RII", "Racal" }, ++ { "RTL", "Realtek" }, ++ { "SCM", "SCM" }, ++ { "SKD", "SysKonnect" }, ++ { "SGI", "SGI" }, ++ { "SMC", "SMC" }, ++ { "SNI", "Siemens Nixdorf" }, ++ { "STL", "Stallion Technologies" }, ++ { "SUN", "Sun" }, ++ { "SUP", "SupraExpress" }, ++ { "SVE", "SVEC" }, ++ { "TCC", "Thomas-Conrad" }, ++ { "TCI", "Tulip" }, ++ { "TCM", "3Com" }, ++ { "TCO", "Thomas-Conrad" }, ++ { "TEC", "Tecmar" }, ++ { "TRU", "Truevision" }, ++ { "TOS", "Toshiba" }, ++ { "TYN", "Tyan" }, ++ { "UBI", "Ungermann-Bass" }, ++ { "USC", "UltraStor" }, ++ { "VDM", "Vadem" }, ++ { "VMI", "Vermont" }, ++ { "WDC", "Western Digital" }, ++ { "ZDS", "Zeos" }, ++ ++ /* From http://faydoc.tripod.com/structures/01/0136.htm */ ++ { "ACT", "Targa" }, ++ { "ADI", "ADI" }, ++ { "AOC", "AOC Intl" }, ++ { "API", "Acer America" }, ++ { "APP", "Apple Computer" }, ++ { "ART", "ArtMedia" }, ++ { "AST", "AST Research" }, ++ { "CPL", "Compal" }, ++ { "CTX", "Chuntex Electronic Co." }, ++ { "DPC", "Delta Electronics" }, ++ { "DWE", "Daewoo" }, ++ { "ECS", "ELITEGROUP" }, ++ { "EIZ", "EIZO" }, ++ { "FCM", "Funai" }, ++ { "GSM", "LG Electronics" }, ++ { "GWY", "Gateway 2000" }, ++ { "HEI", "Hyundai" }, ++ { "HIT", "Hitachi" }, ++ { "HSL", "Hansol" }, ++ { "HTC", "Hitachi" }, ++ { "ICL", "Fujitsu ICL" }, ++ { "IVM", "Idek Iiyama" }, ++ { "KFC", "KFC Computek" }, ++ { "LKM", "ADLAS" }, ++ { "LNK", "LINK Tech" }, ++ { "LTN", "Lite-On" }, ++ { "MAG", "MAG InnoVision" }, ++ { "MAX", "Maxdata" }, ++ { "MEI", "Panasonic" }, ++ { "MEL", "Mitsubishi" }, ++ { "MIR", "miro" }, ++ { "MTC", "MITAC" }, ++ { "NAN", "NANAO" }, ++ { "NEC", "NEC Tech" }, ++ { "NOK", "Nokia" }, ++ { "OQI", "OPTIQUEST" }, ++ { "PBN", "Packard Bell" }, ++ { "PGS", "Princeton" }, ++ { "PHL", "Philips" }, ++ { "REL", "Relisys" }, ++ { "SDI", "Samtron" }, ++ { "SMI", "Smile" }, ++ { "SPT", "Sceptre" }, ++ { "SRC", "Shamrock Technology" }, ++ { "STP", "Sceptre" }, ++ { "TAT", "Tatung" }, ++ { "TRL", "Royal Information Company" }, ++ { "TSB", "Toshiba, Inc." }, ++ { "UNM", "Unisys" }, ++ { "VSC", "ViewSonic" }, ++ { "WTC", "Wen Tech" }, ++ { "ZCM", "Zenith Data Systems" }, ++ ++ { "???", "Unknown" }, ++}; ++ ++static const char * ++find_vendor (const char *code) ++{ ++ int i; ++ ++ for (i = 0; i < sizeof (vendors) / sizeof (vendors[0]); ++i) ++ { ++ const Vendor *v = &(vendors[i]); ++ ++ if (strcmp (v->vendor_id, code) == 0) ++ return v->vendor_name; ++ } ++ ++ return code; ++}; ++ ++char * ++make_display_name (const char *output_name, ++ const MonitorInfo *info) ++{ ++ const char *vendor; ++ int width_mm, height_mm, inches; ++ ++ if (output_name && ++ (strstr ("lvds", output_name) || ++ strstr ("LVDS", output_name) || ++ strstr ("Lvds", output_name))) ++ { ++ vendor = "Laptop"; ++ } ++ else if (info) ++ { ++ vendor = find_vendor (info->manufacturer_code); ++ } ++ else ++ { ++ vendor = "Unknown"; ++ } ++ ++ if (info && info->width_mm != -1 && info->height_mm) ++ { ++ width_mm = info->width_mm; ++ height_mm = info->height_mm; ++ } ++ else if (info && info->n_detailed_timings) ++ { ++ width_mm = info->detailed_timings[0].width_mm; ++ height_mm = info->detailed_timings[0].height_mm; ++ } ++ else ++ { ++ width_mm = -1; ++ height_mm = -1; ++ } ++ ++ if (width_mm != -1 && height_mm != -1) ++ { ++ double d = sqrt (width_mm * width_mm + height_mm * height_mm); ++ ++ inches = (int)(d / 25.4 + 0.5); ++ } ++ else ++ { ++ inches = -1; ++ } ++ ++ if (inches > 0) ++ return g_strdup_printf ("%s %d\"", vendor, inches); ++ else ++ return g_strdup_printf ("%s\n", vendor); ++} +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/edid.h gnome-desktop-2.22.2.new/libgnome-desktop/edid.h +--- gnome-desktop-2.22.2/libgnome-desktop/edid.h 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/edid.h 2008-05-26 22:39:11.000000000 +0200 +@@ -0,0 +1,170 @@ ++typedef unsigned char uchar; ++typedef struct MonitorInfo MonitorInfo; ++typedef struct Timing Timing; ++typedef struct DetailedTiming DetailedTiming; ++ ++typedef enum ++{ ++ UNDEFINED, ++ DVI, ++ HDMI_A, ++ HDMI_B, ++ MDDI, ++ DISPLAY_PORT ++} Interface; ++ ++typedef enum ++{ ++ UNDEFINED_COLOR, ++ MONOCHROME, ++ RGB, ++ OTHER_COLOR ++} ColorType; ++ ++typedef enum ++{ ++ NO_STEREO, ++ FIELD_RIGHT, ++ FIELD_LEFT, ++ TWO_WAY_RIGHT_ON_EVEN, ++ TWO_WAY_LEFT_ON_EVEN, ++ FOUR_WAY_INTERLEAVED, ++ SIDE_BY_SIDE ++} StereoType; ++ ++struct Timing ++{ ++ int width; ++ int height; ++ int frequency; ++}; ++ ++struct DisplayDescriptor ++{ ++}; ++ ++struct DetailedTiming ++{ ++ int pixel_clock; ++ int h_addr; ++ int h_blank; ++ int h_sync; ++ int h_front_porch; ++ int v_addr; ++ int v_blank; ++ int v_sync; ++ int v_front_porch; ++ int width_mm; ++ int height_mm; ++ int right_border; ++ int top_border; ++ int interlaced; ++ StereoType stereo; ++ ++ int digital_sync; ++ union ++ { ++ struct ++ { ++ int bipolar; ++ int serrations; ++ int sync_on_green; ++ } analog; ++ ++ struct ++ { ++ int composite; ++ int serrations; ++ int negative_vsync; ++ int negative_hsync; ++ } digital; ++ }; ++}; ++ ++struct MonitorInfo ++{ ++ int checksum; ++ char manufacturer_code[4]; ++ int product_code; ++ unsigned int serial_number; ++ ++ int production_week; /* -1 if not specified */ ++ int production_year; /* -1 if not specified */ ++ int model_year; /* -1 if not specified */ ++ ++ int major_version; ++ int minor_version; ++ ++ int is_digital; ++ ++ union ++ { ++ struct ++ { ++ int bits_per_primary; ++ Interface interface; ++ int rgb444; ++ int ycrcb444; ++ int ycrcb422; ++ } digital; ++ ++ struct ++ { ++ double video_signal_level; ++ double sync_signal_level; ++ double total_signal_level; ++ ++ int blank_to_black; ++ ++ int separate_hv_sync; ++ int composite_sync_on_h; ++ int composite_sync_on_green; ++ int serration_on_vsync; ++ ColorType color_type; ++ } analog; ++ }; ++ ++ int width_mm; /* -1 if not specified */ ++ int height_mm; /* -1 if not specified */ ++ double aspect_ratio; /* -1.0 if not specififed */ ++ ++ double gamma; /* -1.0 if not specified */ ++ ++ int standby; ++ int suspend; ++ int active_off; ++ ++ int srgb_is_standard; ++ int preferred_timing_includes_native; ++ int continuous_frequency; ++ ++ double red_x; ++ double red_y; ++ double green_x; ++ double green_y; ++ double blue_x; ++ double blue_y; ++ double white_x; ++ double white_y; ++ ++ Timing established[24]; /* Terminated by 0x0x0 */ ++ Timing standard[8]; ++ ++ int n_detailed_timings; ++ DetailedTiming detailed_timings[4]; /* If monitor has a preferred ++ * mode, it is the first one ++ * (whether it has, is ++ * determined by the ++ * preferred_timing_includes ++ * bit. ++ */ ++ ++ /* Optional product description */ ++ char dsc_serial_number[14]; ++ char dsc_product_name[14]; ++ char dsc_string[14]; /* Unspecified ASCII data */ ++}; ++ ++MonitorInfo *decode_edid (const uchar *data); ++char * make_display_name (const char *output_name, ++ const MonitorInfo *info); +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/edid-parse.c gnome-desktop-2.22.2.new/libgnome-desktop/edid-parse.c +--- gnome-desktop-2.22.2/libgnome-desktop/edid-parse.c 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/edid-parse.c 2008-05-26 22:39:11.000000000 +0200 +@@ -0,0 +1,551 @@ ++/* ++ * Copyright 2007 Red Hat, Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * on the rights to use, copy, modify, merge, publish, distribute, sub ++ * license, and/or sell copies of the Software, and to permit persons to whom ++ * the Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER ++ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++/* Author: Soren Sandmann */ ++ ++#include "edid.h" ++#include ++#include ++#include ++ ++#define TRUE 1 ++#define FALSE 0 ++ ++static int ++get_bit (int in, int bit) ++{ ++ return (in & (1 << bit)) >> bit; ++} ++ ++static int ++get_bits (int in, int begin, int end) ++{ ++ int mask = (1 << (end - begin + 1)) - 1; ++ ++ return (in >> begin) & mask; ++} ++ ++static int ++decode_header (const uchar *edid) ++{ ++ if (memcmp (edid, "\x00\xff\xff\xff\xff\xff\xff\x00", 8) == 0) ++ return TRUE; ++ return FALSE; ++} ++ ++static int ++decode_vendor_and_product_identification (const uchar *edid, MonitorInfo *info) ++{ ++ int is_model_year; ++ ++ /* Manufacturer Code */ ++ info->manufacturer_code[0] = get_bits (edid[0x08], 2, 6); ++ info->manufacturer_code[1] = get_bits (edid[0x08], 0, 1) << 3; ++ info->manufacturer_code[1] |= get_bits (edid[0x09], 5, 7); ++ info->manufacturer_code[2] = get_bits (edid[0x09], 0, 4); ++ info->manufacturer_code[3] = '\0'; ++ ++ info->manufacturer_code[0] += 'A' - 1; ++ info->manufacturer_code[1] += 'A' - 1; ++ info->manufacturer_code[2] += 'A' - 1; ++ ++ /* Product Code */ ++ info->product_code = edid[0x0b] << 8 | edid[0x0a]; ++ ++ /* Serial Number */ ++ info->serial_number = ++ edid[0x0c] | edid[0x0d] << 8 | edid[0x0e] << 16 | edid[0x0f] << 24; ++ ++ /* Week and Year */ ++ is_model_year = FALSE; ++ switch (edid[0x10]) ++ { ++ case 0x00: ++ info->production_week = -1; ++ break; ++ ++ case 0xff: ++ info->production_week = -1; ++ is_model_year = TRUE; ++ break; ++ ++ default: ++ info->production_week = edid[0x10]; ++ break; ++ } ++ ++ if (is_model_year) ++ { ++ info->production_year = -1; ++ info->model_year = 1990 + edid[0x11]; ++ } ++ else ++ { ++ info->production_year = 1990 + edid[0x11]; ++ info->model_year = -1; ++ } ++ ++ return TRUE; ++} ++ ++static int ++decode_edid_version (const uchar *edid, MonitorInfo *info) ++{ ++ info->major_version = edid[0x12]; ++ info->minor_version = edid[0x13]; ++ ++ return TRUE; ++} ++ ++static int ++decode_display_parameters (const uchar *edid, MonitorInfo *info) ++{ ++ /* Digital vs Analog */ ++ info->is_digital = get_bit (edid[0x14], 7); ++ ++ if (info->is_digital) ++ { ++ int bits; ++ ++ static const int bit_depth[8] = ++ { ++ -1, 6, 8, 10, 12, 14, 16, -1 ++ }; ++ ++ static const Interface interfaces[6] = ++ { ++ UNDEFINED, DVI, HDMI_A, HDMI_B, MDDI, DISPLAY_PORT ++ }; ++ ++ bits = get_bits (edid[0x14], 4, 6); ++ info->digital.bits_per_primary = bit_depth[bits]; ++ ++ bits = get_bits (edid[0x14], 0, 3); ++ ++ if (bits <= 5) ++ info->digital.interface = interfaces[bits]; ++ else ++ info->digital.interface = UNDEFINED; ++ } ++ else ++ { ++ int bits = get_bits (edid[0x14], 5, 6); ++ ++ static const double levels[][3] = ++ { ++ { 0.7, 0.3, 1.0 }, ++ { 0.714, 0.286, 1.0 }, ++ { 1.0, 0.4, 1.4 }, ++ { 0.7, 0.0, 0.7 }, ++ }; ++ ++ info->analog.video_signal_level = levels[bits][0]; ++ info->analog.sync_signal_level = levels[bits][1]; ++ info->analog.total_signal_level = levels[bits][2]; ++ ++ info->analog.blank_to_black = get_bit (edid[0x14], 4); ++ ++ info->analog.separate_hv_sync = get_bit (edid[0x14], 3); ++ info->analog.composite_sync_on_h = get_bit (edid[0x14], 2); ++ info->analog.composite_sync_on_green = get_bit (edid[0x14], 1); ++ ++ info->analog.serration_on_vsync = get_bit (edid[0x14], 0); ++ } ++ ++ /* Screen Size / Aspect Ratio */ ++ if (edid[0x15] == 0 && edid[0x16] == 0) ++ { ++ info->width_mm = -1; ++ info->height_mm = -1; ++ info->aspect_ratio = -1.0; ++ } ++ else if (edid[0x16] == 0) ++ { ++ info->width_mm = -1; ++ info->height_mm = -1; ++ info->aspect_ratio = 100.0 / (edid[0x15] + 99); ++ } ++ else if (edid[0x15] == 0) ++ { ++ info->width_mm = -1; ++ info->height_mm = -1; ++ info->aspect_ratio = 100.0 / (edid[0x16] + 99); ++ info->aspect_ratio = 1/info->aspect_ratio; /* portrait */ ++ } ++ else ++ { ++ info->width_mm = 10 * edid[0x15]; ++ info->height_mm = 10 * edid[0x16]; ++ } ++ ++ /* Gamma */ ++ if (edid[0x17] == 0xFF) ++ info->gamma = -1.0; ++ else ++ info->gamma = (edid[0x17] + 100.0) / 100.0; ++ ++ /* Features */ ++ info->standby = get_bit (edid[0x18], 7); ++ info->suspend = get_bit (edid[0x18], 6); ++ info->active_off = get_bit (edid[0x18], 5); ++ ++ if (info->is_digital) ++ { ++ info->digital.rgb444 = TRUE; ++ if (get_bit (edid[0x18], 3)) ++ info->digital.ycrcb444 = 1; ++ if (get_bit (edid[0x18], 4)) ++ info->digital.ycrcb422 = 1; ++ } ++ else ++ { ++ int bits = get_bits (edid[0x18], 3, 4); ++ ColorType color_type[4] = ++ { ++ MONOCHROME, RGB, OTHER_COLOR, UNDEFINED_COLOR ++ }; ++ ++ info->analog.color_type = color_type[bits]; ++ } ++ ++ info->srgb_is_standard = get_bit (edid[0x18], 2); ++ ++ /* In 1.3 this is called "has preferred timing" */ ++ info->preferred_timing_includes_native = get_bit (edid[0x18], 1); ++ ++ /* FIXME: In 1.3 this indicates whether the monitor accepts GTF */ ++ info->continuous_frequency = get_bit (edid[0x18], 0); ++ return TRUE; ++} ++ ++static double ++decode_fraction (int high, int low) ++{ ++ double result = 0.0; ++ int i; ++ ++ high = (high << 2) | low; ++ ++ for (i = 0; i < 10; ++i) ++ result += get_bit (high, i) * pow (2, i - 10); ++ ++ return result; ++} ++ ++static int ++decode_color_characteristics (const uchar *edid, MonitorInfo *info) ++{ ++ info->red_x = decode_fraction (edid[0x1b], get_bits (edid[0x19], 6, 7)); ++ info->red_y = decode_fraction (edid[0x1c], get_bits (edid[0x19], 5, 4)); ++ info->green_x = decode_fraction (edid[0x1d], get_bits (edid[0x19], 2, 3)); ++ info->green_y = decode_fraction (edid[0x1e], get_bits (edid[0x19], 0, 1)); ++ info->blue_x = decode_fraction (edid[0x1f], get_bits (edid[0x1a], 6, 7)); ++ info->blue_y = decode_fraction (edid[0x20], get_bits (edid[0x1a], 4, 5)); ++ info->white_x = decode_fraction (edid[0x21], get_bits (edid[0x1a], 2, 3)); ++ info->white_y = decode_fraction (edid[0x22], get_bits (edid[0x1a], 0, 1)); ++ ++ return TRUE; ++} ++ ++static int ++decode_established_timings (const uchar *edid, MonitorInfo *info) ++{ ++ static const Timing established[][8] = ++ { ++ { ++ { 800, 600, 60 }, ++ { 800, 600, 56 }, ++ { 640, 480, 75 }, ++ { 640, 480, 72 }, ++ { 640, 480, 67 }, ++ { 640, 480, 60 }, ++ { 720, 400, 88 }, ++ { 720, 400, 70 } ++ }, ++ { ++ { 1280, 1024, 75 }, ++ { 1024, 768, 75 }, ++ { 1024, 768, 70 }, ++ { 1024, 768, 60 }, ++ { 1024, 768, 87 }, ++ { 832, 624, 75 }, ++ { 800, 600, 75 }, ++ { 800, 600, 72 } ++ }, ++ { ++ { 0, 0, 0 }, ++ { 0, 0, 0 }, ++ { 0, 0, 0 }, ++ { 0, 0, 0 }, ++ { 0, 0, 0 }, ++ { 0, 0, 0 }, ++ { 0, 0, 0 }, ++ { 1152, 870, 75 } ++ }, ++ }; ++ ++ int i, j, idx; ++ ++ idx = 0; ++ for (i = 0; i < 3; ++i) ++ { ++ for (j = 0; j < 8; ++j) ++ { ++ int byte = edid[0x23 + i]; ++ ++ if (get_bit (byte, j) && established[i][j].frequency != 0) ++ info->established[idx++] = established[i][j]; ++ } ++ } ++ return TRUE; ++} ++ ++static int ++decode_standard_timings (const uchar *edid, MonitorInfo *info) ++{ ++ int i; ++ ++ for (i = 0; i < 8; i++) ++ { ++ int first = edid[0x26 + 2 * i]; ++ int second = edid[0x27 + 2 * i]; ++ ++ if (first != 0x01 && second != 0x01) ++ { ++ int w = 8 * (first + 31); ++ int h; ++ ++ switch (get_bits (second, 6, 7)) ++ { ++ case 0x00: h = (w / 16) * 10; break; ++ case 0x01: h = (w / 4) * 3; break; ++ case 0x02: h = (w / 5) * 4; break; ++ case 0x03: h = (w / 16) * 9; break; ++ } ++ ++ info->standard[i].width = w; ++ info->standard[i].height = h; ++ info->standard[i].frequency = get_bits (second, 0, 5) + 60; ++ } ++ } ++ ++ return TRUE; ++} ++ ++static void ++decode_lf_string (const uchar *s, int n_chars, char *result) ++{ ++ int i; ++ for (i = 0; i < n_chars; ++i) ++ { ++ if (s[i] == 0x0a) ++ { ++ *result++ = '\0'; ++ break; ++ } ++ else if (s[i] == 0x00) ++ { ++ /* Convert embedded 0's to spaces */ ++ *result++ = ' '; ++ } ++ else ++ { ++ *result++ = s[i]; ++ } ++ } ++} ++ ++static void ++decode_display_descriptor (const uchar *desc, ++ MonitorInfo *info) ++{ ++ switch (desc[0x03]) ++ { ++ case 0xFC: ++ decode_lf_string (desc + 5, 13, info->dsc_product_name); ++ break; ++ case 0xFF: ++ decode_lf_string (desc + 5, 13, info->dsc_serial_number); ++ break; ++ case 0xFE: ++ decode_lf_string (desc + 5, 13, info->dsc_string); ++ break; ++ case 0xFD: ++ /* Range Limits */ ++ break; ++ case 0xFB: ++ /* Color Point */ ++ break; ++ case 0xFA: ++ /* Timing Identifications */ ++ break; ++ case 0xF9: ++ /* Color Management */ ++ break; ++ case 0xF8: ++ /* Timing Codes */ ++ break; ++ case 0xF7: ++ /* Established Timings */ ++ break; ++ case 0x10: ++ break; ++ } ++} ++ ++static void ++decode_detailed_timing (const uchar *timing, ++ DetailedTiming *detailed) ++{ ++ int bits; ++ StereoType stereo[] = ++ { ++ NO_STEREO, NO_STEREO, FIELD_RIGHT, FIELD_LEFT, ++ TWO_WAY_RIGHT_ON_EVEN, TWO_WAY_LEFT_ON_EVEN, ++ FOUR_WAY_INTERLEAVED, SIDE_BY_SIDE ++ }; ++ ++ detailed->pixel_clock = (timing[0x00] | timing[0x01] << 8) * 10000; ++ detailed->h_addr = timing[0x02] | ((timing[0x04] & 0xf0) << 4); ++ detailed->h_blank = timing[0x03] | ((timing[0x04] & 0x0f) << 8); ++ detailed->v_addr = timing[0x05] | ((timing[0x07] & 0xf0) << 4); ++ detailed->v_blank = timing[0x06] | ((timing[0x07] & 0x0f) << 8); ++ detailed->h_front_porch = timing[0x08] | get_bits (timing[0x0b], 6, 7) << 8; ++ detailed->h_sync = timing[0x09] | get_bits (timing[0x0b], 4, 5) << 8; ++ detailed->v_front_porch = ++ get_bits (timing[0x0a], 4, 7) | get_bits (timing[0x0b], 2, 3) << 4; ++ detailed->v_sync = ++ get_bits (timing[0x0a], 0, 3) | get_bits (timing[0x0b], 0, 1) << 4; ++ detailed->width_mm = timing[0x0c] | get_bits (timing[0x0e], 4, 7) << 8; ++ detailed->height_mm = timing[0x0d] | get_bits (timing[0x0e], 0, 3) << 8; ++ detailed->right_border = timing[0x0f]; ++ detailed->top_border = timing[0x10]; ++ ++ detailed->interlaced = get_bit (timing[0x11], 7); ++ ++ /* Stereo */ ++ bits = get_bits (timing[0x11], 5, 6) << 1 | get_bit (timing[0x11], 0); ++ detailed->stereo = stereo[bits]; ++ ++ /* Sync */ ++ bits = timing[0x11]; ++ ++ detailed->digital_sync = get_bit (bits, 4); ++ if (detailed->digital_sync) ++ { ++ detailed->digital.composite = !get_bit (bits, 3); ++ ++ if (detailed->digital.composite) ++ { ++ detailed->digital.serrations = get_bit (bits, 2); ++ detailed->digital.negative_vsync = FALSE; ++ } ++ else ++ { ++ detailed->digital.serrations = FALSE; ++ detailed->digital.negative_vsync = !get_bit (bits, 2); ++ } ++ ++ detailed->digital.negative_hsync = !get_bit (bits, 0); ++ } ++ else ++ { ++ detailed->analog.bipolar = get_bit (bits, 3); ++ detailed->analog.serrations = get_bit (bits, 2); ++ detailed->analog.sync_on_green = !get_bit (bits, 1); ++ } ++} ++ ++static int ++decode_descriptors (const uchar *edid, MonitorInfo *info) ++{ ++ int i; ++ int timing_idx; ++ ++ timing_idx = 0; ++ ++ for (i = 0; i < 4; ++i) ++ { ++ int index = 0x36 + i * 18; ++ ++ if (edid[index + 0] == 0x00 && edid[index + 1] == 0x00) ++ { ++ decode_display_descriptor (edid + index, info); ++ } ++ else ++ { ++ decode_detailed_timing ( ++ edid + index, &(info->detailed_timings[timing_idx++])); ++ } ++ } ++ ++ info->n_detailed_timings = timing_idx; ++ ++ return TRUE; ++} ++ ++static void ++decode_check_sum (const uchar *edid, ++ MonitorInfo *info) ++{ ++ int i; ++ uchar check = 0; ++ ++ for (i = 0; i < 128; ++i) ++ check += edid[i]; ++ ++ info->checksum = check; ++} ++ ++MonitorInfo * ++decode_edid (const uchar *edid) ++{ ++ MonitorInfo *info = calloc (1, sizeof (MonitorInfo)); ++ ++ decode_check_sum (edid, info); ++ ++ if (!decode_header (edid)) ++ return NULL; ++ ++ if (!decode_vendor_and_product_identification (edid, info)) ++ return NULL; ++ ++ if (!decode_edid_version (edid, info)) ++ return NULL; ++ ++ if (!decode_display_parameters (edid, info)) ++ return NULL; ++ ++ if (!decode_color_characteristics (edid, info)) ++ return NULL; ++ ++ if (!decode_established_timings (edid, info)) ++ return NULL; ++ ++ if (!decode_standard_timings (edid, info)) ++ return NULL; ++ ++ if (!decode_descriptors (edid, info)) ++ return NULL; ++ ++ return info; ++} +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/libgnomeui/monitor-db.h gnome-desktop-2.22.2.new/libgnome-desktop/libgnomeui/monitor-db.h +--- gnome-desktop-2.22.2/libgnome-desktop/libgnomeui/monitor-db.h 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/libgnomeui/monitor-db.h 2008-05-26 22:39:11.000000000 +0200 +@@ -0,0 +1,60 @@ ++#ifdef I_KNOW_THIS_IS_UNSTABLE_AND_ONLY_IN_FEDORA ++#define I_KNOW_THIS_IS_UNSTABLE_AND_NOT_IN_GNOME ++#endif ++ ++#ifndef I_KNOW_THIS_IS_UNSTABLE_AND_NOT_IN_GNOME ++#error This is not for general consumption yet. ++#endif ++ ++#ifndef MONITOR_DB_H ++#define MONITOR_DB_H ++ ++#include ++#include ++ ++typedef struct Output Output; ++typedef struct Configuration Configuration; ++ ++struct Output ++{ ++ char * name; ++ ++ gboolean on; ++ int width; ++ int height; ++ int rate; ++ int x; ++ int y; ++ RWRotation rotation; ++ ++ gboolean connected; ++ char vendor[4]; ++ guint product; ++ guint serial; ++ double aspect; ++ int pref_width; ++ int pref_height; ++ char * display_name; ++ ++ gpointer user_data; ++}; ++ ++struct Configuration ++{ ++ gboolean clone; ++ ++ Output **outputs; ++}; ++ ++void configuration_free (Configuration *configuration); ++Configuration *configuration_new_current (RWScreen *screen); ++gboolean configuration_match (Configuration *config1, ++ Configuration *config2); ++gboolean configuration_save (Configuration *configuration, ++ GError **err); ++void configuration_sanitize (Configuration *configuration); ++gboolean configuration_apply_stored (RWScreen *screen); ++gboolean configuration_applicable (Configuration *configuration, ++ RWScreen *screen); ++ ++#endif +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/libgnomeui/randrwrap.h gnome-desktop-2.22.2.new/libgnome-desktop/libgnomeui/randrwrap.h +--- gnome-desktop-2.22.2/libgnome-desktop/libgnomeui/randrwrap.h 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/libgnomeui/randrwrap.h 2008-05-26 22:39:11.000000000 +0200 +@@ -0,0 +1,104 @@ ++#ifdef I_KNOW_THIS_IS_UNSTABLE_AND_ONLY_IN_FEDORA ++#define I_KNOW_THIS_IS_UNSTABLE_AND_NOT_IN_GNOME ++#endif ++ ++#ifndef I_KNOW_THIS_IS_UNSTABLE_AND_NOT_IN_GNOME ++#error This is not yet for general consumption. ++#endif ++ ++#ifndef RANDR_WRAP_H ++#define RANDR_WRAP_H ++ ++#include ++#include ++ ++typedef struct RWScreen RWScreen; ++typedef struct RWOutput RWOutput; ++typedef struct RWCrtc RWCrtc; ++typedef struct RWMode RWMode; ++ ++typedef void (* RWScreenChanged) (RWScreen *screen, gpointer data); ++ ++typedef enum ++{ ++ RW_ROTATION_0 = (1 << 0), ++ RW_ROTATION_90 = (1 << 1), ++ RW_ROTATION_180 = (1 << 2), ++ RW_ROTATION_270 = (1 << 3), ++ RW_REFLECT_X = (1 << 4), ++ RW_REFLECT_Y = (1 << 5) ++} RWRotation; ++ ++/* RWScreen */ ++RWScreen * rw_screen_new (GdkScreen *screen, ++ RWScreenChanged callback, ++ gpointer data); ++RWOutput ** rw_screen_list_outputs (RWScreen *screen); ++RWCrtc ** rw_screen_list_crtcs (RWScreen *screen); ++RWMode ** rw_screen_list_modes (RWScreen *screen); ++void rw_screen_set_size (RWScreen *screen, ++ int width, ++ int height, ++ int mm_width, ++ int mm_height); ++RWCrtc * rw_screen_get_crtc_by_id (RWScreen *screen, ++ guint32 id); ++gboolean rw_screen_refresh (RWScreen *screen); ++RWOutput * rw_screen_get_output_by_id (RWScreen *screen, ++ guint32 id); ++RWOutput * rw_screen_get_output_by_name (RWScreen *screen, ++ const char *name); ++void rw_screen_get_ranges (RWScreen *screen, ++ int *min_width, ++ int *max_width, ++ int *min_height, ++ int *max_height); ++ ++/* RWOutput */ ++guint32 rw_output_get_id (RWOutput *output); ++const char * rw_output_get_name (RWOutput *output); ++gboolean rw_output_is_connected (RWOutput *output); ++int rw_output_get_size_inches (RWOutput *output); ++int rw_output_get_width_mm (RWOutput *outout); ++int rw_output_get_height_mm (RWOutput *output); ++const guint8 *rw_output_get_edid_data (RWOutput *output); ++RWCrtc ** rw_output_get_possible_crtcs (RWOutput *output); ++RWMode * rw_output_get_current_mode (RWOutput *output); ++RWCrtc * rw_output_get_crtc (RWOutput *output); ++void rw_output_get_position (RWOutput *output, ++ int *x, ++ int *y); ++gboolean rw_output_can_clone (RWOutput *output, ++ RWOutput *clone); ++RWMode ** rw_output_list_modes (RWOutput *output); ++RWMode * rw_output_get_preferred_mode (RWOutput *output); ++gboolean rw_output_supports_mode (RWOutput *output, ++ RWMode *mode); ++ ++/* RWMode */ ++guint32 rw_mode_get_id (RWMode *mode); ++guint rw_mode_get_width (RWMode *mode); ++guint rw_mode_get_height (RWMode *mode); ++int rw_mode_get_freq (RWMode *mode); ++ ++/* RWCrtc */ ++guint32 rw_crtc_get_id (RWCrtc *crtc); ++gboolean rw_crtc_set_config (RWCrtc *crtc, ++ int x, ++ int y, ++ RWMode *mode, ++ RWRotation rotation, ++ RWOutput **outputs, ++ int n_outputs); ++gboolean rw_crtc_can_drive_output (RWCrtc *crtc, ++ RWOutput *output); ++RWMode * rw_crtc_get_current_mode (RWCrtc *crtc); ++void rw_crtc_get_position (RWCrtc *crtc, ++ int *x, ++ int *y); ++RWRotation rw_crtc_get_current_rotation (RWCrtc *crtc); ++RWRotation rw_crtc_get_rotations (RWCrtc *crtc); ++gboolean rw_crtc_supports_rotation (RWCrtc *crtc, ++ RWRotation rotation); ++ ++#endif +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/monitor-db.c gnome-desktop-2.22.2.new/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.2/libgnome-desktop/monitor-db.c 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/monitor-db.c 2008-05-26 22:42:12.000000000 +0200 +@@ -0,0 +1,1315 @@ ++#include ++#include ++#include ++#define I_KNOW_THIS_IS_UNSTABLE_AND_NOT_IN_GNOME ++#include "libgnomeui/monitor-db.h" ++#include "edid.h" ++ ++/* A helper wrapper around the GMarkup parser stuff */ ++static gboolean parse_file_gmarkup (const gchar *file, ++ const GMarkupParser *parser, ++ gpointer data, ++ GError **err); ++ ++typedef struct CrtcAssignment CrtcAssignment; ++ ++static void crtc_assignment_apply (CrtcAssignment *assign); ++static CrtcAssignment *crtc_assignment_new (RWScreen *screen, ++ Output **outputs); ++static void crtc_assignment_free (CrtcAssignment *assign); ++static void output_free (Output *output); ++static Output * output_copy (Output *output); ++ ++typedef struct Parser Parser; ++ ++/* Parser for monitor configurations */ ++struct Parser ++{ ++ Output *output; ++ Configuration *configuration; ++ GPtrArray *outputs; ++ GPtrArray *configurations; ++ GQueue *stack; ++}; ++ ++static int ++parse_int (const char *text) ++{ ++ return strtol (text, NULL, 0); ++} ++ ++static guint ++parse_uint (const char *text) ++{ ++ return strtoul (text, NULL, 0); ++} ++ ++static gboolean ++stack_is (Parser *parser, ++ const char *s1, ++ ...) ++{ ++ GList *stack = NULL; ++ const char *s; ++ GList *l1, *l2; ++ va_list args; ++ ++ stack = g_list_prepend (stack, (gpointer)s1); ++ ++ va_start (args, s1); ++ ++ s = va_arg (args, const char *); ++ while (s) ++ { ++ stack = g_list_prepend (stack, (gpointer)s); ++ s = va_arg (args, const char *); ++ } ++ ++ l1 = stack; ++ l2 = parser->stack->head; ++ ++ while (l1 && l2) ++ { ++ if (strcmp (l1->data, l2->data) != 0) ++ { ++ g_list_free (stack); ++ return FALSE; ++ } ++ ++ l1 = l1->next; ++ l2 = l2->next; ++ } ++ ++ g_list_free (stack); ++ ++ return (!l1 && !l2); ++} ++ ++static void ++handle_start_element (GMarkupParseContext *context, ++ const gchar *name, ++ const gchar **attr_names, ++ const gchar **attr_values, ++ gpointer user_data, ++ GError **err) ++{ ++ Parser *parser = user_data; ++ ++ if (strcmp (name, "output") == 0) ++ { ++ int i; ++ g_assert (parser->output == NULL); ++ ++ parser->output = g_new0 (Output, 1); ++ parser->output->rotation = 0; ++ ++ for (i = 0; attr_names[i] != NULL; ++i) ++ { ++ if (strcmp (attr_names[i], "name") == 0) ++ { ++ parser->output->name = g_strdup (attr_values[i]); ++ break; ++ } ++ } ++ ++ if (!parser->output->name) ++ { ++ /* This really shouldn't happen, but it's better to make ++ * something up than to crash later. ++ */ ++ g_warning ("Malformed monitor configuration file"); ++ ++ parser->output->name = g_strdup ("default"); ++ } ++ parser->output->connected = FALSE; ++ parser->output->on = FALSE; ++ } ++ else if (strcmp (name, "configuration") == 0) ++ { ++ g_assert (parser->configuration == NULL); ++ ++ parser->configuration = g_new0 (Configuration, 1); ++ parser->configuration->clone = FALSE; ++ parser->configuration->outputs = g_new0 (Output *, 1); ++ } ++ ++ g_queue_push_tail (parser->stack, g_strdup (name)); ++} ++ ++static void ++handle_end_element (GMarkupParseContext *context, ++ const gchar *name, ++ gpointer user_data, ++ GError **err) ++{ ++ Parser *parser = user_data; ++ ++ if (strcmp (name, "output") == 0) ++ { ++ /* If no rotation properties were set, just use RW_ROTATION_0 */ ++ if (parser->output->rotation == 0) ++ parser->output->rotation = RW_ROTATION_0; ++ ++ g_ptr_array_add (parser->outputs, parser->output); ++ ++ parser->output = NULL; ++ } ++ else if (strcmp (name, "configuration") == 0) ++ { ++ g_ptr_array_add (parser->outputs, NULL); ++ parser->configuration->outputs = ++ (Output **)g_ptr_array_free (parser->outputs, FALSE); ++ parser->outputs = g_ptr_array_new (); ++ g_ptr_array_add (parser->configurations, parser->configuration); ++ parser->configuration = NULL; ++ } ++ ++ g_free (g_queue_pop_tail (parser->stack)); ++} ++ ++static void ++handle_text (GMarkupParseContext *context, ++ const gchar *text, ++ gsize text_len, ++ gpointer user_data, ++ GError **err) ++{ ++ Parser *parser = user_data; ++ ++ if (stack_is (parser, "vendor", "output", "configuration", NULL)) ++ { ++ parser->output->connected = TRUE; ++ ++ strncpy (parser->output->vendor, text, 3); ++ parser->output->vendor[3] = 0; ++ } ++ else if (stack_is (parser, "clone", "configuration", NULL)) ++ { ++ if (strcmp (text, "yes") == 0) ++ parser->configuration->clone = TRUE; ++ } ++ else if (stack_is (parser, "product", "output", "configuration", NULL)) ++ { ++ parser->output->connected = TRUE; ++ ++ parser->output->product = parse_int (text); ++ } ++ else if (stack_is (parser, "serial", "output", "configuration", NULL)) ++ { ++ parser->output->connected = TRUE; ++ ++ parser->output->serial = parse_uint (text); ++ } ++ else if (stack_is (parser, "width", "output", "configuration", NULL)) ++ { ++ parser->output->on = TRUE; ++ ++ parser->output->width = parse_int (text); ++ } ++ else if (stack_is (parser, "x", "output", "configuration", NULL)) ++ { ++ parser->output->on = TRUE; ++ ++ parser->output->x = parse_int (text); ++ } ++ else if (stack_is (parser, "y", "output", "configuration", NULL)) ++ { ++ parser->output->on = TRUE; ++ ++ parser->output->y = parse_int (text); ++ } ++ else if (stack_is (parser, "height", "output", "configuration", NULL)) ++ { ++ parser->output->on = TRUE; ++ ++ parser->output->height = parse_int (text); ++ } ++ else if (stack_is (parser, "rate", "output", "configuration", NULL)) ++ { ++ parser->output->on = TRUE; ++ ++ parser->output->rate = parse_int (text); ++ } ++ else if (stack_is (parser, "rotation", "output", "configuration", NULL)) ++ { ++ if (strcmp (text, "normal") == 0) ++ { ++ parser->output->rotation |= RW_ROTATION_0; ++ } ++ else if (strcmp (text, "left") == 0) ++ { ++ parser->output->rotation |= RW_ROTATION_90; ++ } ++ else if (strcmp (text, "upside_down") == 0) ++ { ++ parser->output->rotation |= RW_ROTATION_180; ++ } ++ else if (strcmp (text, "right") == 0) ++ { ++ parser->output->rotation |= RW_ROTATION_270; ++ } ++ } ++ else if (stack_is (parser, "reflect_x", "output", "configuration", NULL)) ++ { ++ if (strcmp (text, "yes") == 0) ++ { ++ parser->output->rotation |= RW_REFLECT_X; ++ } ++ } ++ else if (stack_is (parser, "reflect_y", "output", "configuration", NULL)) ++ { ++ if (strcmp (text, "yes") == 0) ++ { ++ parser->output->rotation |= RW_REFLECT_Y; ++ } ++ } ++ else ++ { ++ /* Ignore other properties so we can expand the format in the future */ ++ } ++} ++ ++static void ++parser_free (Parser *parser) ++{ ++ int i; ++ GList *list; ++ ++ if (parser->output) ++ output_free (parser->output); ++ ++ if (parser->configuration) ++ configuration_free (parser->configuration); ++ ++ for (i = 0; i < parser->outputs->len; ++i) ++ { ++ Output *output = parser->outputs->pdata[i]; ++ ++ output_free (output); ++ } ++ ++ g_ptr_array_free (parser->outputs, TRUE); ++ ++ for (i = 0; i < parser->configurations->len; ++i) ++ { ++ Configuration *config = parser->configurations->pdata[i]; ++ ++ configuration_free (config); ++ } ++ ++ g_ptr_array_free (parser->configurations, TRUE); ++ ++ for (list = parser->stack->head; list; list = list->next) ++ g_free (list->data); ++ g_queue_free (parser->stack); ++ ++ g_free (parser); ++} ++ ++static Configuration ** ++configurations_read (const gchar *filename, GError **error) ++{ ++ Parser *parser = g_new0 (Parser, 1); ++ Configuration **result; ++ GMarkupParser callbacks = { ++ handle_start_element, ++ handle_end_element, ++ handle_text, ++ NULL, /* passthrough */ ++ NULL, /* error */ ++ }; ++ ++ parser->configurations = g_ptr_array_new (); ++ parser->outputs = g_ptr_array_new (); ++ parser->stack = g_queue_new (); ++ ++ if (!parse_file_gmarkup (filename, &callbacks, parser, error)) ++ { ++ result = NULL; ++ ++ g_assert (parser->outputs); ++ goto out; ++ } ++ ++ g_assert (parser->outputs); ++ ++ g_ptr_array_add (parser->configurations, NULL); ++ result = (Configuration **)g_ptr_array_free (parser->configurations, FALSE); ++ parser->configurations = g_ptr_array_new (); ++ ++ g_assert (parser->outputs); ++out: ++ parser_free (parser); ++ ++ return result; ++} ++ ++Configuration * ++configuration_new_current (RWScreen *screen) ++{ ++ Configuration *config = g_new0 (Configuration, 1); ++ GPtrArray *a = g_ptr_array_new (); ++ RWOutput **rw_outputs; ++ int i; ++ int clone_width = -1; ++ int clone_height = -1; ++ ++ rw_outputs = rw_screen_list_outputs (screen); ++ ++ config->clone = TRUE; ++ ++ for (i = 0; rw_outputs[i] != NULL; ++i) ++ { ++ RWOutput *rw_output = rw_outputs[i]; ++ Output *output = g_new0 (Output, 1); ++ RWMode *mode = NULL; ++ const guint8 *edid_data = rw_output_get_edid_data (rw_output); ++ RWCrtc *crtc; ++ ++ output->name = g_strdup (rw_output_get_name (rw_output)); ++ output->connected = rw_output_is_connected (rw_output); ++ ++ if (!output->connected) ++ { ++ output->x = -1; ++ output->y = -1; ++ output->width = -1; ++ output->height = -1; ++ output->rate = -1; ++ output->rotation = RW_ROTATION_0; ++ } ++ else ++ { ++ MonitorInfo *info = NULL; ++ ++ if (edid_data) ++ { ++ info = decode_edid (edid_data); ++ ++ memcpy (output->vendor, info->manufacturer_code, ++ sizeof (output->vendor)); ++ ++ output->product = info->product_code; ++ output->serial = info->serial_number; ++ output->aspect = info->aspect_ratio; ++ } ++ else ++ { ++ strcpy (output->vendor, "???"); ++ output->product = 0; ++ output->serial = 0; ++ } ++ ++ output->display_name = make_display_name ( ++ rw_output_get_name (rw_output), info); ++ ++ g_free (info); ++ ++ crtc = rw_output_get_crtc (rw_output); ++ mode = crtc? rw_crtc_get_current_mode (crtc) : NULL; ++ ++ if (crtc && mode) ++ { ++ output->on = TRUE; ++ ++ rw_crtc_get_position (crtc, &output->x, &output->y); ++ output->width = rw_mode_get_width (mode); ++ output->height = rw_mode_get_height (mode); ++ output->rate = rw_mode_get_freq (mode); ++ output->rotation = rw_crtc_get_current_rotation (crtc); ++ ++ if (output->x != 0 || output->y != 0) ++ config->clone = FALSE; ++ ++ if (clone_width == -1) ++ { ++ clone_width = output->width; ++ clone_height = output->height; ++ } ++ else if (clone_width != output->width || ++ clone_height != output->height) ++ { ++ config->clone = FALSE; ++ } ++ } ++ else ++ { ++ output->on = FALSE; ++ config->clone = FALSE; ++ } ++ ++ /* Get preferred size for the monitor */ ++ mode = rw_output_get_preferred_mode (rw_output); ++ ++ if (!mode) ++ { ++ RWMode **modes = rw_output_list_modes (rw_output); ++ ++ /* FIXME: we should pick the "best" mode here, where best is ++ * sorted wrt ++ * ++ * - closest aspect ratio ++ * - mode area ++ * - refresh rate ++ * - We may want to extend randrwrap so that get_preferred ++ * returns that - although that could also depend on ++ * the crtc. ++ */ ++ if (modes[0]) ++ mode = modes[0]; ++ } ++ ++ if (mode) ++ { ++ output->pref_width = rw_mode_get_width (mode); ++ output->pref_height = rw_mode_get_height (mode); ++ } ++ else ++ { ++ /* Pick some random numbers. This should basically never happen */ ++ output->pref_width = 1024; ++ output->pref_height = 768; ++ } ++ } ++ ++ g_ptr_array_add (a, output); ++ } ++ ++ g_ptr_array_add (a, NULL); ++ ++ config->outputs = (Output **)g_ptr_array_free (a, FALSE); ++ ++ g_assert (configuration_match (config, config)); ++ ++ return config; ++} ++ ++static void ++output_free (Output *output) ++{ ++ if (output->display_name) ++ g_free (output->display_name); ++ ++ if (output->name) ++ g_free (output->name); ++ ++ g_free (output); ++} ++ ++static Output * ++output_copy (Output *output) ++{ ++ Output *copy = g_new0 (Output, 1); ++ ++ *copy = *output; ++ ++ copy->name = g_strdup (output->name); ++ copy->display_name = g_strdup (output->display_name); ++ ++ return copy; ++} ++ ++static void ++outputs_free (Output **outputs) ++{ ++ int i; ++ ++ for (i = 0; outputs[i] != NULL; ++i) ++ output_free (outputs[i]); ++} ++ ++void ++configuration_free (Configuration *config) ++{ ++ outputs_free (config->outputs); ++ ++ g_free (config); ++} ++ ++static void ++configurations_free (Configuration **configurations) ++{ ++ int i; ++ ++ for (i = 0; configurations[i] != NULL; ++i) ++ configuration_free (configurations[i]); ++ ++ g_free (configurations); ++} ++ ++static gboolean ++parse_file_gmarkup (const gchar *filename, ++ const GMarkupParser *parser, ++ gpointer data, ++ GError **err) ++{ ++ GMarkupParseContext *context = NULL; ++ gchar *contents = NULL; ++ gboolean result = TRUE; ++ gsize len; ++ ++ if (!g_file_get_contents (filename, &contents, &len, err)) ++ { ++ result = FALSE; ++ goto out; ++ } ++ ++ context = g_markup_parse_context_new (parser, 0, data, NULL); ++ ++ if (!g_markup_parse_context_parse (context, contents, len, err)) ++ { ++ result = FALSE; ++ goto out; ++ } ++ ++ if (!g_markup_parse_context_end_parse (context, err)) ++ { ++ result = FALSE; ++ goto out; ++ } ++ ++out: ++ if (contents) ++ g_free (contents); ++ ++ if (context) ++ g_markup_parse_context_free (context); ++ ++ return result; ++} ++ ++static gboolean ++output_match (Output *output1, Output *output2) ++{ ++ if (strcmp (output1->name, output2->name) != 0) ++ return FALSE; ++ ++ if (strcmp (output1->vendor, output2->vendor) != 0) ++ return FALSE; ++ ++ if (output1->product != output2->product) ++ return FALSE; ++ ++ if (output1->serial != output2->serial) ++ return FALSE; ++ ++ if (output1->connected != output2->connected) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++static Output * ++find_output (Configuration *config, const char *name) ++{ ++ int i; ++ ++ for (i = 0; config->outputs[i] != NULL; ++i) ++ { ++ Output *output = config->outputs[i]; ++ ++ if (strcmp (name, output->name) == 0) ++ return output; ++ } ++ ++ return NULL; ++} ++ ++gboolean ++configuration_match (Configuration *c1, Configuration *c2) ++{ ++ int i; ++ ++ for (i = 0; c1->outputs[i] != NULL; ++i) ++ { ++ Output *output1 = c1->outputs[i]; ++ Output *output2; ++ ++ output2 = find_output (c2, output1->name); ++ if (!output2 || !output_match (output1, output2)) ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static Output ** ++make_outputs (Configuration *config) ++{ ++ GPtrArray *outputs; ++ Output *first_on;; ++ int i; ++ ++ outputs = g_ptr_array_new (); ++ ++ first_on = NULL; ++ ++ for (i = 0; config->outputs[i] != NULL; ++i) ++ { ++ Output *old = config->outputs[i]; ++ Output *new = output_copy (old); ++ ++ if (old->on && !first_on) ++ first_on = old; ++ ++ if (config->clone && new->on) ++ { ++ g_assert (first_on); ++ ++ new->width = first_on->width; ++ new->height = first_on->height; ++ new->rotation = first_on->rotation; ++ new->x = 0; ++ new->y = 0; ++ } ++ ++ g_ptr_array_add (outputs, new); ++ } ++ ++ g_ptr_array_add (outputs, NULL); ++ ++ return (Output **)g_ptr_array_free (outputs, FALSE); ++} ++ ++gboolean ++configuration_applicable (Configuration *configuration, ++ RWScreen *screen) ++{ ++ Output **outputs = make_outputs (configuration); ++ CrtcAssignment *assign = crtc_assignment_new (screen, outputs); ++ gboolean result; ++ ++ if (assign) ++ { ++ result = TRUE; ++ crtc_assignment_free (assign); ++ } ++ else ++ { ++ result = FALSE; ++ } ++ ++ outputs_free (outputs); ++ ++ return result; ++} ++ ++static Configuration * ++configuration_find (Configuration **haystack, ++ Configuration *needle) ++{ ++ int i; ++ ++ for (i = 0; haystack[i] != NULL; ++i) ++ { ++ if (configuration_match (haystack[i], needle)) ++ return haystack[i]; ++ } ++ ++ return NULL; ++} ++ ++/* Database management */ ++static gboolean ++do_free (gpointer data) ++{ ++ g_free (data); ++ return FALSE; ++} ++ ++static gchar * ++idle_free (gchar *s) ++{ ++ g_idle_add (do_free, s); ++ ++ return s; ++} ++ ++static const gchar * ++get_filename (void) ++{ ++ return idle_free ( ++ g_build_filename ( ++ g_get_home_dir(), ".gnome2", "monitors.xml", NULL)); ++} ++ ++static const char * ++get_rotation_name (RWRotation r) ++{ ++ if (r & RW_ROTATION_0) ++ return "normal"; ++ if (r & RW_ROTATION_90) ++ return "left"; ++ if (r & RW_ROTATION_180) ++ return "upside_down"; ++ if (r & RW_ROTATION_270) ++ return "right"; ++ ++ return "normal"; ++} ++ ++static const char * ++yes_no (int x) ++{ ++ return x? "yes" : "no"; ++} ++ ++static const char * ++get_reflect_x (RWRotation r) ++{ ++ return yes_no (r & RW_REFLECT_X); ++} ++ ++static const char * ++get_reflect_y (RWRotation r) ++{ ++ return yes_no (r & RW_REFLECT_Y); ++} ++ ++static void ++emit_configuration (Configuration *config, ++ GString *string) ++{ ++ int j; ++ ++ g_string_append_printf (string, "\n"); ++ ++ g_string_append_printf (string, " %s\n", yes_no (config->clone)); ++ ++ for (j = 0; config->outputs[j] != NULL; ++j) ++ { ++ Output *output = config->outputs[j]; ++ ++ g_string_append_printf ( ++ string, " \n", output->name); ++ ++ if (output->connected && *output->vendor != '\0') ++ { ++ g_string_append_printf ( ++ string, " %s\n", output->vendor); ++ g_string_append_printf ( ++ string, " 0x%04x\n", output->product); ++ g_string_append_printf ( ++ string, " 0x%08x\n", output->serial); ++ } ++ ++ /* An unconnected output which is on does not make sense */ ++ if (output->connected && output->on) ++ { ++ g_string_append_printf ( ++ string, " %d\n", output->width); ++ g_string_append_printf ( ++ string, " %d\n", output->height); ++ g_string_append_printf ( ++ string, " %d\n", output->rate); ++ g_string_append_printf ( ++ string, " %d\n", output->x); ++ g_string_append_printf ( ++ string, " %d\n", output->y); ++ g_string_append_printf ( ++ string, " %s\n", get_rotation_name (output->rotation)); ++ g_string_append_printf ( ++ string, " %s\n", get_reflect_x (output->rotation)); ++ g_string_append_printf ( ++ string, " %s\n", get_reflect_y (output->rotation)); ++ } ++ ++ g_string_append_printf (string, " \n"); ++ } ++ ++ g_string_append_printf (string, "\n"); ++} ++ ++void ++configuration_sanitize (Configuration *config) ++{ ++ int i; ++ int x_offset, y_offset; ++ ++ /* Offset everything by the top/left-most coordinate to ++ * make sure the configuration starts at (0, 0) ++ */ ++ x_offset = y_offset = G_MAXINT; ++ for (i = 0; config->outputs[i]; ++i) ++ { ++ Output *output = config->outputs[i]; ++ ++ if (output->on) ++ { ++ x_offset = MIN (x_offset, output->x); ++ y_offset = MIN (y_offset, output->y); ++ } ++ } ++ ++ for (i = 0; config->outputs[i]; ++i) ++ { ++ Output *output = config->outputs[i]; ++ ++ if (output->on) ++ { ++ output->x -= x_offset; ++ output->y -= y_offset; ++ } ++ } ++} ++ ++gboolean ++configuration_save (Configuration *configuration, GError **err) ++{ ++ Configuration **configurations; ++ GString *output = g_string_new(""); ++ int i; ++ ++ configurations = configurations_read (get_filename(), NULL); ++ ++ if (configurations) ++ { ++ for (i = 0; configurations[i] != NULL; ++i) ++ { ++ if (!configuration_match (configurations[i], configuration)) ++ emit_configuration (configurations[i], output); ++ } ++ ++ configurations_free (configurations); ++ } ++ ++ emit_configuration (configuration, output); ++ ++ return g_file_set_contents (get_filename(), output->str, -1, err); ++} ++ ++static gboolean ++apply_configuration (Configuration *conf, RWScreen *screen) ++{ ++ CrtcAssignment *assignment; ++ Output **outputs; ++ ++ g_print ("applying configuration. Clone: %s\n", yes_no (conf->clone)); ++ ++ outputs = make_outputs (conf); ++ ++ assignment = crtc_assignment_new (screen, outputs); ++ ++ outputs_free (outputs); ++ ++ if (assignment) ++ { ++ crtc_assignment_apply (assignment); ++ ++ crtc_assignment_free (assignment); ++ ++ return TRUE; ++ } ++ else ++ { ++ g_print (" ... no assignment found\n"); ++ } ++ ++ return FALSE; ++} ++ ++gboolean ++configuration_apply_stored (RWScreen *screen) ++{ ++ char *file = g_build_filename ( ++ g_get_home_dir(), ".gnome2", "monitors.xml", NULL); ++ Configuration **configs = configurations_read (file, NULL); ++ Configuration *current; ++ Configuration *found; ++ gboolean result; ++ ++ rw_screen_refresh (screen); ++ ++ current = configuration_new_current (screen); ++ if (configs) ++ { ++ if ((found = configuration_find (configs, current))) ++ { ++ apply_configuration (found, screen); ++ result = TRUE; ++ } ++ else ++ { ++ result = FALSE; ++ } ++ ++ configurations_free (configs); ++ } ++ ++ g_free (file); ++ configuration_free (current); ++ ++ return result; ++} ++ ++ ++/* ++ * CRTC assignment ++ */ ++typedef struct CrtcInfo CrtcInfo; ++ ++struct CrtcInfo ++{ ++ RWMode *mode; ++ int x; ++ int y; ++ RWRotation rotation; ++ GPtrArray *outputs; ++}; ++ ++struct CrtcAssignment ++{ ++ RWScreen *screen; ++ GHashTable *info; ++}; ++ ++static gboolean ++can_clone (CrtcInfo *info, ++ RWOutput *output) ++{ ++ int i; ++ ++ for (i = 0; i < info->outputs->len; ++i) ++ { ++ RWOutput *clone = info->outputs->pdata[i]; ++ ++ if (!rw_output_can_clone (clone, output)) ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static gboolean ++crtc_assignment_assign (CrtcAssignment *assign, ++ RWCrtc *crtc, ++ RWMode *mode, ++ int x, ++ int y, ++ RWRotation rotation, ++ RWOutput *output) ++{ ++ /* FIXME: We should reject stuff that is outside the screen ranges */ ++ ++ CrtcInfo *info = g_hash_table_lookup (assign->info, crtc); ++ ++ if (!rw_crtc_can_drive_output (crtc, output) || ++ !rw_output_supports_mode (output, mode) || ++ !rw_crtc_supports_rotation (crtc, rotation)) ++ { ++ return FALSE; ++ } ++ ++ if (info) ++ { ++ if (info->mode == mode && ++ info->x == x && ++ info->y == y && ++ info->rotation == rotation && ++ can_clone (info, output)) ++ { ++ g_ptr_array_add (info->outputs, output); ++ ++ return TRUE; ++ } ++ } ++ else ++ { ++ CrtcInfo *info = g_new0 (CrtcInfo, 1); ++ ++ info->mode = mode; ++ info->x = x; ++ info->y = y; ++ info->rotation = rotation; ++ info->outputs = g_ptr_array_new (); ++ ++ g_ptr_array_add (info->outputs, output); ++ ++ g_hash_table_insert (assign->info, crtc, info); ++ ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++static void ++crtc_assignment_unassign (CrtcAssignment *assign, ++ RWCrtc *crtc, ++ RWOutput *output) ++{ ++ CrtcInfo *info = g_hash_table_lookup (assign->info, crtc); ++ ++ if (info) ++ { ++ g_ptr_array_remove (info->outputs, output); ++ ++ if (info->outputs->len == 0) ++ g_hash_table_remove (assign->info, crtc); ++ } ++} ++ ++static void ++crtc_assignment_free (CrtcAssignment *assign) ++{ ++ g_hash_table_destroy (assign->info); ++ ++ g_free (assign); ++} ++ ++static void ++configure_crtc (gpointer key, ++ gpointer value, ++ gpointer data) ++{ ++ RWCrtc *crtc = key; ++ CrtcInfo *info = value; ++ ++ g_print ("Configuring crtc %x with ", rw_crtc_get_id (crtc)); ++ ++ if (info->mode) ++ { ++ int n_outputs = info->outputs->len; ++ ++ g_print ("mode %x, %d outputs (%d %d %d %d), and rotation %d ", ++ rw_mode_get_id (info->mode), ++ n_outputs, ++ info->x, info->y, ++ rw_mode_get_width (info->mode), ++ rw_mode_get_height (info->mode), ++ info->rotation); ++ } ++ else ++ { ++ g_print ("no mode "); ++ } ++ ++ if (rw_crtc_set_config (crtc, ++ info->x, info->y, ++ info->mode, ++ info->rotation, ++ (RWOutput **)info->outputs->pdata, ++ info->outputs->len)) ++ { ++ g_print ("succeeded\n"); ++ } ++ else ++ { ++ g_print ("failed\n"); ++ } ++} ++ ++static gboolean ++mode_is_rotated (CrtcInfo *info) ++{ ++ if ((info->rotation & RW_ROTATION_270) || ++ (info->rotation & RW_ROTATION_90)) ++ { ++ g_print ("rotated: %d\n", info->rotation); ++ return TRUE; ++ } ++ return FALSE; ++} ++ ++static gboolean ++crtc_is_rotated (RWCrtc *crtc) ++{ ++ RWRotation r = rw_crtc_get_current_rotation (crtc); ++ ++ if ((r & RW_ROTATION_270) || ++ (r & RW_ROTATION_90)) ++ { ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++static void ++crtc_assignment_apply (CrtcAssignment *assign) ++{ ++ GList *active_crtcs = g_hash_table_get_keys (assign->info); ++ RWCrtc **all_crtcs = rw_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) ++ { ++ RWCrtc *crtc = list->data; ++ CrtcInfo *info = g_hash_table_lookup (assign->info, crtc); ++ int w, h; ++ ++ w = rw_mode_get_width (info->mode); ++ h = rw_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); ++ ++ rw_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) ++ { ++ RWCrtc *crtc = all_crtcs[i]; ++ RWMode *mode = rw_crtc_get_current_mode (crtc); ++ int x, y; ++ ++ if (mode) ++ { ++ int w, h; ++ rw_crtc_get_position (crtc, &x, &y); ++ ++ w = rw_mode_get_width (mode); ++ h = rw_mode_get_height (mode); ++ ++ if (crtc_is_rotated (crtc)) ++ { ++ int tmp = h; ++ h = w; ++ w = tmp; ++ } ++ ++ if (x + w > width || y + h > height) ++ rw_crtc_set_config (crtc, 0, 0, NULL, RW_ROTATION_0, NULL, 0); ++ } ++ } ++ ++ /* Turn off all CRTC's that are not in the assignment */ ++ for (i = 0; all_crtcs[i] != NULL; ++i) ++ { ++ RWCrtc *crtc = all_crtcs[i]; ++ ++ if (!g_hash_table_lookup (assign->info, crtc)) ++ rw_crtc_set_config (crtc, 0, 0, NULL, RW_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 apparently believes what X tells it. It is a foolish ++ * application. ++ */ ++ width_mm = (width / 96.0) * 25.4; ++ height_mm = (height / 96.0) * 25.4; ++ ++ rw_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. ++ * ++ * Brute force - the number of objects involved is small ++ * enough that it doesn't matter. ++ */ ++static gboolean ++real_assign_crtcs (RWScreen *screen, ++ Output **outputs, ++ CrtcAssignment *assignment) ++{ ++ RWCrtc **crtcs = rw_screen_list_crtcs (screen); ++ Output *output; ++ int i; ++ ++ output = *outputs; ++ if (!output) ++ return TRUE; ++ ++ /* It is always allowed for an output to be turned off */ ++ if (!output->on) ++ { ++ return real_assign_crtcs (screen, outputs + 1, assignment); ++ } ++ ++ for (i = 0; crtcs[i] != NULL; ++i) ++ { ++ int pass; ++ ++ /* Make two passses, one where frequencies must match, then ++ * one where they don't have to ++ */ ++ for (pass = 0; pass < 2; ++pass) ++ { ++ RWCrtc *crtc = crtcs[i]; ++ RWOutput *rw_output = rw_screen_get_output_by_name (screen, output->name); ++ RWMode **modes = rw_output_list_modes (rw_output); ++ int j; ++ ++ for (j = 0; modes[j] != NULL; ++j) ++ { ++ RWMode *mode = modes[j]; ++ ++ if (rw_mode_get_width (mode) == output->width && ++ rw_mode_get_height (mode) == output->height && ++ (pass == 1 || rw_mode_get_freq (mode) == output->rate)) ++ { ++ if (crtc_assignment_assign ( ++ assignment, crtc, modes[j], ++ output->x, output->y, ++ output->rotation, ++ rw_output)) ++ { ++ if (real_assign_crtcs (screen, outputs + 1, assignment)) ++ return TRUE; ++ ++ crtc_assignment_unassign (assignment, crtc, rw_output); ++ } ++ } ++ } ++ } ++ } ++ ++ return FALSE; ++} ++ ++static void ++crtc_info_free (CrtcInfo *info) ++{ ++ g_ptr_array_free (info->outputs, TRUE); ++ g_free (info); ++} ++ ++static CrtcAssignment * ++crtc_assignment_new (RWScreen *screen, Output **outputs) ++{ ++ CrtcAssignment *assignment = g_new0 (CrtcAssignment, 1); ++ ++ assignment->info = g_hash_table_new_full ( ++ g_direct_hash, g_direct_equal, NULL, (GFreeFunc)crtc_info_free); ++ ++ if (real_assign_crtcs (screen, outputs, assignment)) ++ { ++ assignment->screen = screen; ++ ++ return assignment; ++ } ++ else ++ { ++ crtc_assignment_free (assignment); ++ ++ return NULL; ++ } ++} +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.2/libgnome-desktop/randrwrap.c gnome-desktop-2.22.2.new/libgnome-desktop/randrwrap.c +--- gnome-desktop-2.22.2/libgnome-desktop/randrwrap.c 1970-01-01 01:00:00.000000000 +0100 ++++ gnome-desktop-2.22.2.new/libgnome-desktop/randrwrap.c 2008-05-26 22:39:11.000000000 +0200 +@@ -0,0 +1,1124 @@ ++#define I_KNOW_THIS_IS_UNSTABLE_AND_NOT_IN_GNOME ++#include "libgnomeui/randrwrap.h" ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define DISPLAY(o) ((o)->info->screen->xdisplay) ++ ++typedef struct ScreenInfo ScreenInfo; ++ ++struct ScreenInfo ++{ ++ int min_width; ++ int max_width; ++ int min_height; ++ int max_height; ++ ++ XRRScreenResources *resources; ++ ++ RWOutput ** outputs; ++ RWCrtc ** crtcs; ++ RWMode ** modes; ++ ++ RWScreen * screen; ++}; ++ ++struct RWScreen ++{ ++ GdkScreen * gdk_screen; ++ GdkWindow * gdk_root; ++ Display * xdisplay; ++ Screen * xscreen; ++ Window xroot; ++ ScreenInfo * info; ++ ++ int randr_event_base; ++ ++ RWScreenChanged callback; ++ gpointer data; ++}; ++ ++struct RWOutput ++{ ++ ScreenInfo * info; ++ RROutput id; ++ ++ char * name; ++ RWCrtc * current_crtc; ++ gboolean connected; ++ gulong width_mm; ++ gulong height_mm; ++ RWCrtc ** possible_crtcs; ++ RWOutput ** clones; ++ RWMode ** modes; ++ int n_preferred; ++ guint8 * edid_data; ++}; ++ ++struct RWOutputWrap ++{ ++ RROutput id; ++}; ++ ++struct RWCrtc ++{ ++ ScreenInfo * info; ++ RRCrtc id; ++ ++ RWMode * current_mode; ++ RWOutput ** current_outputs; ++ RWOutput ** possible_outputs; ++ int x; ++ int y; ++ ++ RWRotation current_rotation; ++ RWRotation rotations; ++}; ++ ++struct RWMode ++{ ++ ScreenInfo * info; ++ RRMode id; ++ char * name; ++ int width; ++ int height; ++ int freq; /* in mHz */ ++}; ++ ++/* RWCrtc */ ++static RWCrtc * crtc_new (ScreenInfo *info, ++ RRCrtc id); ++static void crtc_free (RWCrtc *crtc); ++static void crtc_initialize (RWCrtc *crtc, ++ XRRScreenResources *res); ++ ++ ++/* RWOutput */ ++static RWOutput *output_new (ScreenInfo *info, ++ RROutput id); ++static void output_initialize (RWOutput *output, ++ XRRScreenResources *res); ++static void output_free (RWOutput *output); ++ ++ ++/* RWMode */ ++static RWMode * mode_new (ScreenInfo *info, ++ RRMode id); ++static void mode_initialize (RWMode *mode, ++ XRRModeInfo *info); ++static void mode_free (RWMode *mode); ++ ++ ++/* Screen */ ++static RWOutput * ++rw_output_by_id (ScreenInfo *info, RROutput id) ++{ ++ RWOutput **output; ++ ++ for (output = info->outputs; *output; ++output) ++ { ++ if ((*output)->id == id) ++ return *output; ++ } ++ ++ return NULL; ++} ++ ++static RWCrtc * ++crtc_by_id (ScreenInfo *info, RRCrtc id) ++{ ++ RWCrtc **crtc; ++ ++ for (crtc = info->crtcs; *crtc; ++crtc) ++ { ++ if ((*crtc)->id == id) ++ return *crtc; ++ } ++ ++ return NULL; ++} ++ ++static RWMode * ++mode_by_id (ScreenInfo *info, RRMode id) ++{ ++ RWMode **mode; ++ ++ for (mode = info->modes; *mode; ++mode) ++ { ++ if ((*mode)->id == id) ++ return *mode; ++ } ++ ++ return NULL; ++} ++ ++static void ++screen_info_free (ScreenInfo *info) ++{ ++ RWOutput **output; ++ RWCrtc **crtc; ++ RWMode **mode; ++ ++ if (info->resources) ++ { ++ XRRFreeScreenResources (info->resources); ++ ++ info->resources = NULL; ++ } ++ ++ if (info->outputs) ++ { ++ for (output = info->outputs; *output; ++output) ++ output_free (*output); ++ g_free (info->outputs); ++ } ++ ++ if (info->crtcs) ++ { ++ for (crtc = info->crtcs; *crtc; ++crtc) ++ crtc_free (*crtc); ++ g_free (info->crtcs); ++ } ++ ++ if (info->modes) ++ { ++ for (mode = info->modes; *mode; ++mode) ++ mode_free (*mode); ++ g_free (info->modes); ++ } ++ ++ g_free (info); ++} ++ ++static gboolean ++fill_out_screen_info (Display *xdisplay, Window xroot, ++ ScreenInfo *info) ++{ ++ XRRScreenResources *resources; ++ ++ XRRGetScreenSizeRange (xdisplay, xroot, ++ &(info->min_width), ++ &(info->min_height), ++ &(info->max_width), ++ &(info->max_height)); ++ ++#if 0 ++ g_print ("ranges: %d - %d; %d - %d\n", ++ screen->min_width, screen->max_width, ++ screen->min_height, screen->max_height); ++#endif ++ ++ resources = XRRGetScreenResources (xdisplay, xroot); ++ ++ if (resources) ++ { ++ int i; ++ GPtrArray *a; ++ RWCrtc **crtc; ++ RWOutput **output; ++ ++#if 0 ++ g_print ("Resource Timestamp: %u\n", (guint32)resources->timestamp); ++ g_print ("Resource Configuration Timestamp: %u\n", (guint32)resources->configTimestamp); ++#endif ++ ++ info->resources = resources; ++ ++ /* We create all the structures before initializing them, so ++ * that they can refer to each other. ++ */ ++ a = g_ptr_array_new (); ++ for (i = 0; i < resources->ncrtc; ++i) ++ { ++ RWCrtc *crtc = crtc_new (info, resources->crtcs[i]); ++ ++ g_ptr_array_add (a, crtc); ++ } ++ g_ptr_array_add (a, NULL); ++ info->crtcs = (RWCrtc **)g_ptr_array_free (a, FALSE); ++ ++ a = g_ptr_array_new (); ++ for (i = 0; i < resources->noutput; ++i) ++ { ++ RWOutput *output = output_new (info, resources->outputs[i]); ++ ++ g_ptr_array_add (a, output); ++ } ++ g_ptr_array_add (a, NULL); ++ info->outputs = (RWOutput **)g_ptr_array_free (a, FALSE); ++ ++ a = g_ptr_array_new (); ++ for (i = 0; i < resources->nmode; ++i) ++ { ++ RWMode *mode = mode_new (info, resources->modes[i].id); ++ ++ g_ptr_array_add (a, mode); ++ } ++ g_ptr_array_add (a, NULL); ++ info->modes = (RWMode **)g_ptr_array_free (a, FALSE); ++ ++ /* Initialize */ ++ for (crtc = info->crtcs; *crtc; ++crtc) ++ crtc_initialize (*crtc, resources); ++ ++ for (output = info->outputs; *output; ++output) ++ output_initialize (*output, resources); ++ ++ for (i = 0; i < resources->nmode; ++i) ++ { ++ RWMode *mode = mode_by_id (info, resources->modes[i].id); ++ ++ mode_initialize (mode, &(resources->modes[i])); ++ } ++ ++ return TRUE; ++ } ++ else ++ { ++ g_print ("Couldn't get screen resources\n"); ++ ++ return FALSE; ++ } ++} ++ ++static ScreenInfo * ++screen_info_new (RWScreen *screen) ++{ ++ ScreenInfo *info = g_new0 (ScreenInfo, 1); ++ RWOutput **o; ++ ++ info->outputs = NULL; ++ info->crtcs = NULL; ++ info->modes = NULL; ++ info->screen = screen; ++ ++ if (fill_out_screen_info (screen->xdisplay, screen->xroot, info)) ++ { ++ return info; ++ } ++ else ++ { ++ g_free (info); ++ return NULL; ++ } ++ ++ for (o = info->outputs; *o; o++) ++ { ++ ++ } ++ ++} ++ ++static gboolean ++screen_update (RWScreen *screen, gboolean force_callback) ++{ ++ ScreenInfo *info; ++ gboolean changed = FALSE; ++ ++ g_return_val_if_fail (screen != NULL, FALSE); ++ ++ info = screen_info_new (screen); ++ if (info) ++ { ++ if (info->resources->configTimestamp != screen->info->resources->configTimestamp) ++ changed = TRUE; ++ ++ screen_info_free (screen->info); ++ ++ screen->info = info; ++ } ++ ++ if ((changed || force_callback) && screen->callback) ++ screen->callback (screen, screen->data); ++ ++ return changed; ++} ++ ++static GdkFilterReturn ++screen_on_event (GdkXEvent *xevent, ++ GdkEvent *event, ++ gpointer data) ++{ ++ RWScreen *screen = data; ++ XEvent *e = xevent; ++ ++ if (e->type - screen->randr_event_base == RRNotify) ++ { ++ XRRNotifyEvent *event = (XRRNotifyEvent *)e; ++ ++ switch (event->subtype) ++ { ++ default: ++ break; ++ } ++ ++ /* FIXME: we may need to be more discriminating in ++ * what causes 'changed' events ++ */ ++ screen_update (screen, TRUE); ++ } ++ ++ /* Pass the event on to GTK+ */ ++ return GDK_FILTER_CONTINUE; ++} ++ ++RWScreen * ++rw_screen_new (GdkScreen *gdk_screen, ++ RWScreenChanged callback, ++ gpointer data) ++{ ++ Display *dpy = GDK_SCREEN_XDISPLAY (gdk_screen); ++ int event_base; ++ int ignore; ++ ++ if (XRRQueryExtension (dpy, &event_base, &ignore)) ++ { ++ RWScreen *screen = g_new0 (RWScreen, 1); ++ ++ screen->gdk_screen = gdk_screen; ++ screen->gdk_root = gdk_screen_get_root_window (gdk_screen); ++ screen->xroot = gdk_x11_drawable_get_xid (screen->gdk_root); ++ screen->xdisplay = dpy; ++ screen->xscreen = gdk_x11_screen_get_xscreen (screen->gdk_screen); ++ ++ screen->callback = callback; ++ screen->data = data; ++ ++ screen->randr_event_base = event_base; ++ ++ screen->info = screen_info_new (screen); ++ ++ XRRSelectInput (screen->xdisplay, ++ screen->xroot, ++ RRScreenChangeNotifyMask | ++ RRCrtcChangeNotifyMask | ++ RROutputPropertyNotifyMask); ++ ++ gdk_x11_register_standard_event_type ( ++ gdk_screen_get_display (gdk_screen), ++ event_base, ++ RRNotify + 1); ++ ++ gdk_window_add_filter (screen->gdk_root, screen_on_event, screen); ++ return screen; ++ } ++ ++ return NULL; ++} ++ ++void ++rw_screen_set_size (RWScreen *screen, ++ int width, ++ int height, ++ int mm_width, ++ int mm_height) ++{ ++ g_return_if_fail (screen != NULL); ++ ++ XRRSetScreenSize (screen->xdisplay, screen->xroot, ++ width, height, mm_width, mm_height); ++} ++ ++void ++rw_screen_get_ranges (RWScreen *screen, ++ int *min_width, ++ int *max_width, ++ int *min_height, ++ int *max_height) ++{ ++ g_return_if_fail (screen != NULL); ++ ++ if (min_width) ++ *min_width = screen->info->min_width; ++ ++ if (max_width) ++ *max_width = screen->info->max_width; ++ ++ if (min_height) ++ *min_height = screen->info->min_height; ++ ++ if (max_height) ++ *max_height = screen->info->max_height; ++} ++ ++gboolean ++rw_screen_refresh (RWScreen *screen) ++{ ++ return screen_update (screen, FALSE); ++} ++ ++RWMode ** ++rw_screen_list_modes (RWScreen *screen) ++{ ++ return screen->info->modes; ++} ++ ++RWCrtc ** ++rw_screen_list_crtcs (RWScreen *screen) ++{ ++ return screen->info->crtcs; ++} ++ ++RWOutput ** ++rw_screen_list_outputs (RWScreen *screen) ++{ ++ return screen->info->outputs; ++} ++ ++RWCrtc * ++rw_screen_get_crtc_by_id (RWScreen *screen, ++ guint32 id) ++{ ++ int i; ++ ++ for (i = 0; screen->info->crtcs[i] != NULL; ++i) ++ { ++ if (screen->info->crtcs[i]->id == id) ++ return screen->info->crtcs[i]; ++ } ++ ++ return NULL; ++} ++ ++RWOutput * ++rw_screen_get_output_by_id (RWScreen *screen, ++ guint32 id) ++{ ++ int i; ++ ++ for (i = 0; screen->info->outputs[i] != NULL; ++i) ++ { ++ if (screen->info->outputs[i]->id == id) ++ return screen->info->outputs[i]; ++ } ++ ++ return NULL; ++} ++ ++/* RWOutput */ ++static RWOutput * ++output_new (ScreenInfo *info, RROutput id) ++{ ++ RWOutput *output = g_new0 (RWOutput, 1); ++ ++ output->id = id; ++ output->info = info; ++ ++ return output; ++} ++ ++static guint8 * ++get_property (Display *dpy, ++ RROutput output, ++ Atom atom, ++ int *len) ++{ ++ unsigned char *prop; ++ int actual_format; ++ unsigned long nitems, bytes_after; ++ Atom actual_type; ++ guint8 *result; ++ ++ XRRGetOutputProperty (dpy, output, atom, ++ 0, 100, False, False, ++ AnyPropertyType, ++ &actual_type, &actual_format, ++ &nitems, &bytes_after, &prop); ++ ++ if (actual_type == XA_INTEGER && actual_format == 8) ++ { ++ result = g_memdup (prop, nitems); ++ if (len) ++ *len = nitems; ++ } ++ else ++ { ++ result = NULL; ++ } ++ ++ XFree (prop); ++ ++ return result; ++} ++ ++static guint8 * ++read_edid_data (RWOutput *output) ++{ ++ Atom edid_atom = XInternAtom (DISPLAY (output), "EDID_DATA", FALSE); ++ guint8 *result; ++ int len; ++ ++ result = get_property (DISPLAY (output), ++ output->id, edid_atom, &len); ++ ++ if (result) ++ { ++ if (len == 128) ++ return result; ++ else ++ g_free (result); ++ } ++ ++ return NULL; ++} ++ ++static void ++output_initialize (RWOutput *output, XRRScreenResources *res) ++{ ++ XRROutputInfo *info = XRRGetOutputInfo ( ++ DISPLAY (output), res, output->id); ++ GPtrArray *a; ++ int i; ++ ++ g_print ("Output %lx Timestamp: %u\n", output->id, (guint32)info->timestamp); ++ ++ if (!info) ++ { ++ /* FIXME */ ++ return; ++ } ++ ++ output->name = g_strdup (info->name); /* FIXME: what is nameLen used for? */ ++ output->current_crtc = crtc_by_id (output->info, info->crtc); ++ output->width_mm = info->mm_width; ++ output->height_mm = info->mm_height; ++ output->connected = (info->connection == RR_Connected); ++ ++ /* Possible crtcs */ ++ a = g_ptr_array_new (); ++ ++ for (i = 0; i < info->ncrtc; ++i) ++ { ++ RWCrtc *crtc = crtc_by_id (output->info, info->crtcs[i]); ++ ++ if (crtc) ++ g_ptr_array_add (a, crtc); ++ } ++ g_ptr_array_add (a, NULL); ++ output->possible_crtcs = (RWCrtc **)g_ptr_array_free (a, FALSE); ++ ++ /* Clones */ ++ a = g_ptr_array_new (); ++ for (i = 0; i < info->nclone; ++i) ++ { ++ RWOutput *rw_output = rw_output_by_id (output->info, info->clones[i]); ++ ++ if (rw_output) ++ g_ptr_array_add (a, rw_output); ++ } ++ g_ptr_array_add (a, NULL); ++ output->clones = (RWOutput **)g_ptr_array_free (a, FALSE); ++ ++ /* Modes */ ++ a = g_ptr_array_new (); ++ for (i = 0; i < info->nmode; ++i) ++ { ++ RWMode *mode = mode_by_id (output->info, info->modes[i]); ++ ++ if (mode) ++ g_ptr_array_add (a, mode); ++ } ++ g_ptr_array_add (a, NULL); ++ output->modes = (RWMode **)g_ptr_array_free (a, FALSE); ++ ++ output->n_preferred = info->npreferred; ++ ++ /* Edid data */ ++ output->edid_data = read_edid_data (output); ++ ++ XRRFreeOutputInfo (info); ++} ++ ++static void ++output_free (RWOutput *output) ++{ ++ g_free (output); ++} ++ ++guint32 ++rw_output_get_id (RWOutput *output) ++{ ++ return output->id; ++} ++ ++const guint8 * ++rw_output_get_edid_data (RWOutput *output) ++{ ++ return output->edid_data; ++} ++ ++RWOutput * ++rw_screen_get_output_by_name (RWScreen *screen, ++ const char *name) ++{ ++ int i; ++ ++ for (i = 0; screen->info->outputs[i] != NULL; ++i) ++ { ++ RWOutput *output = screen->info->outputs[i]; ++ ++ if (strcmp (output->name, name) == 0) ++ return output; ++ } ++ ++ return NULL; ++} ++ ++RWCrtc * ++rw_output_get_crtc (RWOutput *output) ++{ ++ return output->current_crtc; ++} ++ ++RWMode * ++rw_output_get_current_mode (RWOutput *output) ++{ ++ RWCrtc *crtc; ++ ++ g_return_val_if_fail (output != NULL, NULL); ++ ++ if ((crtc = rw_output_get_crtc (output))) ++ return rw_crtc_get_current_mode (crtc); ++ ++ return NULL; ++} ++ ++void ++rw_output_get_position (RWOutput *output, ++ int *x, ++ int *y) ++{ ++ RWCrtc *crtc; ++ ++ g_return_if_fail (output != NULL); ++ ++ if ((crtc = rw_output_get_crtc (output))) ++ rw_crtc_get_position (crtc, x, y); ++} ++ ++const char * ++rw_output_get_name (RWOutput *output) ++{ ++ return output->name; ++} ++ ++int ++rw_output_get_width_mm (RWOutput *output) ++{ ++ return output->width_mm; ++} ++ ++int ++rw_output_get_height_mm (RWOutput *output) ++{ ++ return output->height_mm; ++} ++ ++RWMode * ++rw_output_get_preferred_mode (RWOutput *output) ++{ ++ if (output->n_preferred) ++ return output->modes[0]; ++ ++ return NULL; ++} ++ ++RWMode ** ++rw_output_list_modes (RWOutput *output) ++{ ++ return output->modes; ++} ++ ++gboolean ++rw_output_is_connected (RWOutput *output) ++{ ++ return output->connected; ++} ++ ++gboolean ++rw_output_supports_mode (RWOutput *output, ++ RWMode *mode) ++{ ++ int i; ++ ++ g_return_val_if_fail (output != NULL, FALSE); ++ g_return_val_if_fail (mode != NULL, FALSE); ++ ++ for (i = 0; output->modes[i] != NULL; ++i) ++ { ++ if (output->modes[i] == mode) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++gboolean ++rw_output_can_clone (RWOutput *output, ++ RWOutput *clone) ++{ ++ int i; ++ ++ g_return_val_if_fail (output != NULL, FALSE); ++ g_return_val_if_fail (clone != NULL, FALSE); ++ ++ for (i = 0; output->clones[i] != NULL; ++i) ++ { ++ if (output->clones[i] == clone) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++/* RWCrtc */ ++typedef struct ++{ ++ Rotation xrot; ++ RWRotation rot; ++} RotationMap; ++static const RotationMap rotation_map[] = ++{ ++ { RR_Rotate_0, RW_ROTATION_0 }, ++ { RR_Rotate_90, RW_ROTATION_90 }, ++ { RR_Rotate_180, RW_ROTATION_180 }, ++ { RR_Rotate_270, RW_ROTATION_270 }, ++ { RR_Reflect_X, RW_REFLECT_X }, ++ { RR_Reflect_Y, RW_REFLECT_Y }, ++}; ++ ++static RWRotation ++rw_rotation_from_xrotation (Rotation r) ++{ ++ int i; ++ RWRotation result = 0; ++ ++ for (i = 0; i < G_N_ELEMENTS (rotation_map); ++i) ++ { ++ if (r & rotation_map[i].xrot) ++ result |= rotation_map[i].rot; ++ } ++ ++ return result; ++} ++ ++static Rotation ++xrotation_from_rotation (RWRotation r) ++{ ++ int i; ++ Rotation result = 0; ++ ++ for (i = 0; i < G_N_ELEMENTS (rotation_map); ++i) ++ { ++ if (r & rotation_map[i].rot) ++ result |= rotation_map[i].xrot; ++ } ++ ++ return result; ++} ++ ++gboolean ++rw_crtc_set_config (RWCrtc *crtc, ++ int x, ++ int y, ++ RWMode *mode, ++ RWRotation rotation, ++ RWOutput **outputs, ++ int n_outputs) ++{ ++ ScreenInfo *info; ++ GArray *output_ids; ++ int i; ++ ++ g_return_val_if_fail (crtc != NULL, FALSE); ++ g_return_val_if_fail (mode != NULL || outputs == NULL || n_outputs == 0, FALSE); ++ ++ info = crtc->info; ++ ++ if (mode) ++ { ++ g_return_val_if_fail (x + mode->width <= info->max_width, FALSE); ++ g_return_val_if_fail (y + mode->height <= info->max_height, FALSE); ++ } ++ ++ output_ids = g_array_new (FALSE, FALSE, sizeof (RROutput)); ++ ++ if (outputs) ++ { ++ for (i = 0; i < n_outputs; ++i) ++ g_array_append_val (output_ids, outputs[i]->id); ++ } ++ ++ XRRSetCrtcConfig (DISPLAY (crtc), info->resources, crtc->id, ++ CurrentTime, ++ x, y, ++ mode? mode->id : None, ++ xrotation_from_rotation (rotation), ++ (RROutput *)output_ids->data, ++ output_ids->len); ++ ++ g_array_free (output_ids, TRUE); ++ ++ return TRUE; ++} ++ ++RWMode * ++rw_crtc_get_current_mode (RWCrtc *crtc) ++{ ++ g_return_val_if_fail (crtc != NULL, NULL); ++ ++ return crtc->current_mode; ++} ++ ++guint32 ++rw_crtc_get_id (RWCrtc *crtc) ++{ ++ g_return_val_if_fail (crtc != NULL, 0); ++ ++ return crtc->id; ++} ++ ++gboolean ++rw_crtc_can_drive_output (RWCrtc *crtc, ++ RWOutput *output) ++{ ++ int i; ++ ++ g_return_val_if_fail (crtc != NULL, FALSE); ++ g_return_val_if_fail (output != NULL, FALSE); ++ ++ for (i = 0; crtc->possible_outputs[i] != NULL; ++i) ++ { ++ if (crtc->possible_outputs[i] == output) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++/* FIXME: merge with get_mode()? */ ++void ++rw_crtc_get_position (RWCrtc *crtc, ++ int *x, ++ int *y) ++{ ++ g_return_if_fail (crtc != NULL); ++ ++ if (x) ++ *x = crtc->x; ++ ++ if (y) ++ *y = crtc->y; ++} ++ ++/* FIXME: merge with get_mode()? */ ++RWRotation ++rw_crtc_get_current_rotation (RWCrtc *crtc) ++{ ++ return crtc->current_rotation; ++} ++ ++RWRotation ++rw_crtc_get_rotations (RWCrtc *crtc) ++{ ++ return crtc->rotations; ++} ++ ++gboolean ++rw_crtc_supports_rotation (RWCrtc * crtc, ++ RWRotation rotation) ++{ ++ return (crtc->rotations & rotation); ++} ++ ++static RWCrtc * ++crtc_new (ScreenInfo *info, RROutput id) ++{ ++ RWCrtc *crtc = g_new0 (RWCrtc, 1); ++ ++ crtc->id = id; ++ crtc->info = info; ++ ++ return crtc; ++} ++ ++static void ++crtc_initialize (RWCrtc *crtc, XRRScreenResources *res) ++{ ++ XRRCrtcInfo *info = XRRGetCrtcInfo (DISPLAY (crtc), res, crtc->id); ++ GPtrArray *a; ++ int i; ++ ++ g_print ("CRTC %lx Timestamp: %u\n", crtc->id, (guint32)info->timestamp); ++ ++ if (!info) ++ { ++ /* FIXME: We need to reaquire the screen resources */ ++ return; ++ } ++ ++ /* RWMode */ ++ crtc->current_mode = mode_by_id (crtc->info, info->mode); ++ ++ crtc->x = info->x; ++ crtc->y = info->y; ++ ++ /* Current outputs */ ++ a = g_ptr_array_new (); ++ for (i = 0; i < info->noutput; ++i) ++ { ++ RWOutput *output = rw_output_by_id (crtc->info, info->outputs[i]); ++ ++ if (output) ++ g_ptr_array_add (a, output); ++ } ++ g_ptr_array_add (a, NULL); ++ crtc->current_outputs = (RWOutput **)g_ptr_array_free (a, FALSE); ++ ++ /* Possible outputs */ ++ a = g_ptr_array_new (); ++ for (i = 0; i < info->npossible; ++i) ++ { ++ RWOutput *output = rw_output_by_id (crtc->info, info->possible[i]); ++ ++ if (output) ++ g_ptr_array_add (a, output); ++ } ++ g_ptr_array_add (a, NULL); ++ crtc->possible_outputs = (RWOutput **)g_ptr_array_free (a, FALSE); ++ ++ /* Rotations */ ++ crtc->current_rotation = rw_rotation_from_xrotation (info->rotation); ++ crtc->rotations = rw_rotation_from_xrotation (info->rotations); ++ ++ XRRFreeCrtcInfo (info); ++} ++ ++static void ++crtc_free (RWCrtc *crtc) ++{ ++ g_free (crtc->current_outputs); ++ g_free (crtc->possible_outputs); ++ g_free (crtc); ++} ++ ++/* RWMode */ ++static RWMode * ++mode_new (ScreenInfo *info, RRMode id) ++{ ++ RWMode *mode = g_new0 (RWMode, 1); ++ ++ mode->id = id; ++ mode->info = info; ++ ++ return mode; ++} ++ ++guint32 ++rw_mode_get_id (RWMode *mode) ++{ ++ return mode->id; ++} ++ ++guint ++rw_mode_get_width (RWMode *mode) ++{ ++ return mode->width; ++} ++ ++int ++rw_mode_get_freq (RWMode *mode) ++{ ++ return (mode->freq) / 1000; ++} ++ ++guint ++rw_mode_get_height (RWMode *mode) ++{ ++ return mode->height; ++} ++ ++static void ++mode_initialize (RWMode *mode, XRRModeInfo *info) ++{ ++ mode->name = g_strdup (info->name); ++ mode->width = info->width; ++ mode->height = info->height; ++ mode->freq = ((info->dotClock / (double)info->hTotal) / info->vTotal + 0.5) * 1000; ++} ++ ++static void ++mode_free (RWMode *mode) ++{ ++ g_free (mode->name); ++ g_free (mode); ++} ++ ++ ++#ifdef INCLUDE_MAIN ++static void ++on_screen_changed (RWScreen *screen, gpointer data) ++{ ++ g_print ("Changed\n"); ++} ++ ++static gboolean ++do_refresh (gpointer data) ++{ ++ RWScreen *screen = data; ++ ++ rw_screen_refresh (screen); ++ ++ return TRUE; ++} ++ ++int ++main (int argc, char **argv) ++{ ++ int i; ++ ++ gtk_init (&argc, &argv); ++ ++ RWScreen *screen = rw_screen_new (gdk_screen_get_default(), ++ on_screen_changed, ++ NULL); ++ ++ for (i = 0; screen->info->crtcs[i]; ++i) ++ { ++ RWCrtc *crtc = screen->info->crtcs[i]; ++ ++ if (crtc->current_mode) ++ { ++ g_print ("CRTC %p: (%d %d %d %d)\n", ++ crtc, crtc->x, crtc->y, ++ crtc->current_mode->width, crtc->current_mode->height); ++ } ++ else ++ { ++ g_print ("CRTC %p: turned off\n", crtc); ++ } ++ } ++ ++ for (i = 0; screen->info->outputs[i]; ++i) ++ { ++ RWOutput *output = screen->info->outputs[i]; ++ ++ g_print ("Output %s currently", output->name); ++ ++ if (!output->current_crtc) ++ g_print (" turned off\n"); ++ else ++ g_print (" driven by CRTC %p\n", output->current_crtc); ++ } ++ ++ g_timeout_add (500, do_refresh, screen); ++ ++ gtk_main (); ++ ++ return 0; ++} ++#endif --- gnome-desktop-2.22.2.orig/debian/patches/01_desktopfile_gettext.patch +++ gnome-desktop-2.22.2/debian/patches/01_desktopfile_gettext.patch @@ -0,0 +1,74 @@ +diff -Nur gnome-desktop-2.19.4/libgnome-desktop/gnome-desktop-item.c gnome-desktop-2.19.4.new/libgnome-desktop/gnome-desktop-item.c +--- gnome-desktop-2.19.4/libgnome-desktop/gnome-desktop-item.c 2007-06-17 20:55:15.000000000 +0200 ++++ gnome-desktop-2.19.4.new/libgnome-desktop/gnome-desktop-item.c 2007-06-29 13:48:58.000000000 +0200 +@@ -84,6 +84,7 @@ + GHashTable *main_hash; + + char *location; ++ char *gettext_domain; + + time_t mtime; + +@@ -383,6 +384,7 @@ + "1.0"); + + retval->launch_time = 0; ++ retval->gettext_domain = NULL; + + return retval; + } +@@ -563,6 +565,12 @@ + return dirname; + } + ++/* ++ * ZK: I needed lookup before the real declaration so here's a prototype ++ */ ++static const char * ++lookup (const GnomeDesktopItem *item, const char *key); ++ + /** + * gnome_desktop_item_new_from_uri: + * @uri: GnomeVFSURI to load the GnomeDesktopItem from +@@ -684,6 +692,7 @@ + + g_free (subfn); + ++ retval->gettext_domain = lookup(retval, GNOME_DESKTOP_ITEM_GETTEXT_DOMAIN); + return retval; + } + +@@ -723,6 +732,7 @@ + + /* FIXME: Sort order? */ + ++ retval->gettext_domain = lookup(retval, GNOME_DESKTOP_ITEM_GETTEXT_DOMAIN); + return retval; + } + +@@ -992,6 +1002,14 @@ + strcmp (locale, "C") == 0) { + return lookup (item, key); + } else { ++ if (item->gettext_domain) { ++ char *value = lookup(item, key); ++ if (value != NULL && value[0] != '\0') { ++ char *locale_value = dgettext(item->gettext_domain, value); ++ if (locale_value) ++ return locale_value; ++ } ++ } + const char *ret; + char *full = g_strdup_printf ("%s[%s]", key, locale); + ret = lookup (item, full); +diff -Nur gnome-desktop-2.19.4/libgnome-desktop/libgnome/gnome-desktop-item.h gnome-desktop-2.19.4.new/libgnome-desktop/libgnome/gnome-desktop-item.h +--- gnome-desktop-2.19.4/libgnome-desktop/libgnome/gnome-desktop-item.h 2007-06-17 20:55:15.000000000 +0200 ++++ gnome-desktop-2.19.4.new/libgnome-desktop/libgnome/gnome-desktop-item.h 2007-06-29 13:48:20.000000000 +0200 +@@ -96,6 +96,7 @@ + #define GNOME_DESKTOP_ITEM_SORT_ORDER "SortOrder" /* strings */ + #define GNOME_DESKTOP_ITEM_URL "URL" /* string */ + #define GNOME_DESKTOP_ITEM_DOC_PATH "X-GNOME-DocPath" /* string */ ++#define GNOME_DESKTOP_ITEM_GETTEXT_DOMAIN "X-Ubuntu-Gettext-Domain" /* string */ + + /* The vfolder proposal */ + #define GNOME_DESKTOP_ITEM_CATEGORIES "Categories" /* string */ --- gnome-desktop-2.22.2.orig/debian/patches/104_gd-randr-revert-support.patch +++ gnome-desktop-2.22.2/debian/patches/104_gd-randr-revert-support.patch @@ -0,0 +1,132 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.0/libgnome-desktop/libgnomeui/monitor-db.h gnome-desktop-2.22.0.new/libgnome-desktop/libgnomeui/monitor-db.h +--- gnome-desktop-2.22.0/libgnome-desktop/libgnomeui/monitor-db.h 2008-04-07 13:33:15.000000000 +0200 ++++ gnome-desktop-2.22.0.new/libgnome-desktop/libgnomeui/monitor-db.h 2008-04-07 13:33:53.000000000 +0200 +@@ -48,6 +48,8 @@ + Configuration *config2); + gboolean configuration_save (Configuration *configuration, + GError **err); ++gboolean configuration_save_onetime (Configuration *configuration, ++ GError **err); + void configuration_sanitize (Configuration *configuration); + gboolean configuration_apply_stored (RWScreen *screen); + gboolean configuration_applicable (Configuration *configuration, +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.0/libgnome-desktop/monitor-db.c gnome-desktop-2.22.0.new/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.0/libgnome-desktop/monitor-db.c 2008-04-07 13:33:16.000000000 +0200 ++++ gnome-desktop-2.22.0.new/libgnome-desktop/monitor-db.c 2008-04-07 13:33:17.000000000 +0200 +@@ -1,3 +1,4 @@ ++#include + #include + #include + #include +@@ -727,6 +728,14 @@ + g_get_home_dir(), ".gnome2", "monitors.xml", NULL)); + } + ++static const gchar * ++get_onetime_filename (void) ++{ ++ return idle_free ( ++ g_build_filename ( ++ g_get_home_dir(), ".gnome2", "monitors-onetime.xml", NULL)); ++} ++ + static const char * + get_rotation_name (RWRotation r) + { +@@ -847,14 +856,14 @@ + } + } + +-gboolean +-configuration_save (Configuration *configuration, GError **err) ++static gboolean ++configuration_save_to_file (Configuration *configuration, GError **err, const gchar* filename) + { + Configuration **configurations; + GString *output = g_string_new(""); + int i; + +- configurations = configurations_read (get_filename(), NULL); ++ configurations = configurations_read (filename, NULL); + + if (configurations) + { +@@ -869,7 +878,25 @@ + + emit_configuration (configuration, output); + +- return g_file_set_contents (get_filename(), output->str, -1, err); ++ if (g_file_set_contents (filename, output->str, -1, err)) { ++ return TRUE; ++ } else { ++ g_print("Failed to save to %s\n", filename); ++ g_print("Content was\n%s\n", output->str); ++ return FALSE; ++ } ++} ++ ++gboolean ++configuration_save (Configuration *configuration, GError **err) ++{ ++ return configuration_save_to_file (configuration, err, get_filename()); ++} ++ ++gboolean ++configuration_save_onetime (Configuration *configuration, GError **err) ++{ ++ return configuration_save_to_file (configuration, err, get_onetime_filename()); + } + + static gboolean +@@ -905,20 +932,32 @@ + gboolean + configuration_apply_stored (RWScreen *screen) + { +- char *file = g_build_filename ( +- g_get_home_dir(), ".gnome2", "monitors.xml", NULL); +- Configuration **configs = configurations_read (file, NULL); ++ Configuration **configs; + Configuration *current; + Configuration *found; +- gboolean result; ++ gboolean result = FALSE; + + if (!screen) { + g_print("No valid screens to apply stored configuration\n"); + return FALSE; + } + ++ g_print ("Reading config file %s\n", get_onetime_filename()); ++ configs = configurations_read (get_onetime_filename(), NULL); ++ if ( ! configs ) { ++ /* No monitors-onetime.xml file, so try monitors.xml */ ++ configs = configurations_read (get_filename(), NULL); ++ } else { ++ /* monitors-onetime.xml was loaded; now remove it before trying anything so ++ * if there are problems, we won't re-load it again */ ++ if (unlink(get_onetime_filename()) != 0) { ++ g_print("Cannot unlink %s - cowardly refusing to apply it\n", get_onetime_filename()); ++ return FALSE; ++ } ++ } ++ + rw_screen_refresh (screen); +- ++ + current = configuration_new_current (screen); + if (configs) + { +@@ -931,11 +970,10 @@ + { + result = FALSE; + } +- ++ + configurations_free (configs); + } +- +- g_free (file); ++ + configuration_free (current); + + return result; --- gnome-desktop-2.22.2.orig/debian/patches/102_gd-xrandr-null-pointer-check.patch +++ gnome-desktop-2.22.2/debian/patches/102_gd-xrandr-null-pointer-check.patch @@ -0,0 +1,12 @@ +diff -Nurp gnome-desktop-2.21.92-patched/libgnome-desktop/randrwrap.c gnome-desktop-2.21.92-working/libgnome-desktop/randrwrap.c +--- gnome-desktop-2.21.92-patched/libgnome-desktop/randrwrap.c 2008-03-03 16:50:17.000000000 -0800 ++++ gnome-desktop-2.21.92-working/libgnome-desktop/randrwrap.c 2008-03-03 16:52:40.000000000 -0800 +@@ -574,7 +574,7 @@ output_initialize (RWOutput *output, XRR + + g_print ("Output %lx Timestamp: %u\n", output->id, (guint32)info->timestamp); + +- if (!info) ++ if (!info || !output->info) + { + /* FIXME */ + return; --- gnome-desktop-2.22.2.orig/debian/patches/99_ltmain_as-needed.patch +++ gnome-desktop-2.22.2/debian/patches/99_ltmain_as-needed.patch @@ -0,0 +1,32 @@ +Index: nautilus-2.18.1/ltmain.sh +=================================================================== +--- nautilus-2.18.1.orig/ltmain.sh 2006-07-13 09:12:13.000000000 +0200 ++++ nautilus-2.18.1/ltmain.sh 2007-06-06 23:36:38.899175453 +0200 +@@ -1784,6 +1784,11 @@ + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + ++ -Wl,--as-needed) ++ deplibs="$deplibs $arg" ++ continue ++ ;; ++ + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= +@@ -2124,6 +2129,15 @@ + lib= + found=no + case $deplib in ++ -Wl,--as-needed) ++ if test "$linkmode,$pass" = "prog,link"; then ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ else ++ deplibs="$deplib $deplibs" ++ fi ++ continue ++ ;; + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" --- gnome-desktop-2.22.2.orig/debian/patches/105_gd-randr-null-ptrs.patch +++ gnome-desktop-2.22.2/debian/patches/105_gd-randr-null-ptrs.patch @@ -0,0 +1,382 @@ +diff -Nurp gnome-desktop-2.22.1-patched/libgnome-desktop/monitor-db.c gnome-desktop-2.22.1-working/libgnome-desktop/monitor-db.c +--- gnome-desktop-2.22.1-patched/libgnome-desktop/monitor-db.c 2008-04-08 22:36:57.000000000 -0700 ++++ gnome-desktop-2.22.1-working/libgnome-desktop/monitor-db.c 2008-04-09 00:20:23.000000000 -0700 +@@ -270,6 +270,8 @@ parser_free (Parser *parser) + int i; + GList *list; + ++ g_return_if_fail (parser != NULL); ++ + if (parser->output) + output_free (parser->output); + +@@ -349,6 +351,8 @@ configuration_new_current (RWScreen *scr + int clone_width = -1; + int clone_height = -1; + ++ g_return_val_if_fail (screen != NULL, NULL); ++ + rw_outputs = rw_screen_list_outputs (screen); + + config->clone = TRUE; +@@ -509,6 +513,8 @@ outputs_free (Output **outputs) + { + int i; + ++ g_return_if_fail(outputs != NULL); ++ + for (i = 0; outputs[i] != NULL; ++i) + output_free (outputs[i]); + } +@@ -516,6 +522,7 @@ outputs_free (Output **outputs) + void + configuration_free (Configuration *config) + { ++ g_return_if_fail(config != NULL); + outputs_free (config->outputs); + + g_free (config); +@@ -525,6 +532,7 @@ static void + configurations_free (Configuration **configurations) + { + int i; ++ g_return_if_fail(configurations != NULL); + + for (i = 0; configurations[i] != NULL; ++i) + configuration_free (configurations[i]); +@@ -576,6 +584,9 @@ out: + static gboolean + output_match (Output *output1, Output *output2) + { ++ g_return_val_if_fail(output1 != NULL, FALSE); ++ g_return_val_if_fail(output2 != NULL, FALSE); ++ + if (strcmp (output1->name, output2->name) != 0) + return FALSE; + +diff -Nurp gnome-desktop-2.22.1-patched/libgnome-desktop/randrwrap.c gnome-desktop-2.22.1-working/libgnome-desktop/randrwrap.c +--- gnome-desktop-2.22.1-patched/libgnome-desktop/randrwrap.c 2008-04-08 22:36:57.000000000 -0700 ++++ gnome-desktop-2.22.1-working/libgnome-desktop/randrwrap.c 2008-04-08 23:15:31.000000000 -0700 +@@ -118,7 +118,9 @@ static RWOutput * + rw_output_by_id (ScreenInfo *info, RROutput id) + { + RWOutput **output; +- ++ ++ g_return_val_if_fail (info != NULL, NULL); ++ + for (output = info->outputs; *output; ++output) + { + if ((*output)->id == id) +@@ -132,7 +134,11 @@ static RWCrtc * + crtc_by_id (ScreenInfo *info, RRCrtc id) + { + RWCrtc **crtc; +- ++ ++ g_return_val_if_fail (info != NULL, NULL); ++ if (!info) ++ return NULL; ++ + for (crtc = info->crtcs; *crtc; ++crtc) + { + if ((*crtc)->id == id) +@@ -146,7 +152,9 @@ static RWMode * + mode_by_id (ScreenInfo *info, RRMode id) + { + RWMode **mode; +- ++ ++ g_return_val_if_fail (info != NULL, NULL); ++ + for (mode = info->modes; *mode; ++mode) + { + if ((*mode)->id == id) +@@ -163,6 +171,8 @@ screen_info_free (ScreenInfo *info) + RWCrtc **crtc; + RWMode **mode; + ++ g_return_if_fail (info != NULL); ++ + if (info->resources) + { + XRRFreeScreenResources (info->resources); +@@ -200,6 +210,8 @@ fill_out_screen_info (Display *xdisplay, + { + XRRScreenResources *resources; + ++ g_return_val_if_fail (info != NULL, FALSE); ++ + gdk_error_trap_push (); + + if (!XRRGetScreenSizeRange (xdisplay, xroot, +@@ -305,6 +317,9 @@ screen_info_new (RWScreen *screen) + ScreenInfo *info = g_new0 (ScreenInfo, 1); + RWOutput **o; + ++ g_return_val_if_fail (info != NULL, NULL); ++ g_return_val_if_fail (screen != NULL, NULL); ++ + info->outputs = NULL; + info->crtcs = NULL; + info->modes = NULL; +@@ -360,7 +375,7 @@ screen_on_event (GdkXEvent *xevent, + RWScreen *screen = data; + XEvent *e = xevent; + +- if (e->type - screen->randr_event_base == RRNotify) ++ if (e && e->type - screen->randr_event_base == RRNotify) + { + XRRNotifyEvent *event = (XRRNotifyEvent *)e; + +@@ -395,7 +410,8 @@ rw_screen_new (GdkScreen *gdk_screen, + if (XRRQueryExtension (dpy, &event_base, &ignore)) + { + RWScreen *screen = g_new0 (RWScreen, 1); +- ++ g_return_val_if_fail (screen != NULL, NULL); ++ + screen->gdk_screen = gdk_screen; + screen->gdk_root = gdk_screen_get_root_window (gdk_screen); + screen->xroot = gdk_x11_drawable_get_xid (screen->gdk_root); +@@ -471,18 +487,27 @@ rw_screen_refresh (RWScreen *screen) + RWMode ** + rw_screen_list_modes (RWScreen *screen) + { ++ g_return_val_if_fail (screen != NULL, NULL); ++ g_return_val_if_fail (screen->info != NULL, NULL); ++ + return screen->info->modes; + } + + RWCrtc ** + rw_screen_list_crtcs (RWScreen *screen) + { ++ g_return_val_if_fail (screen != NULL, NULL); ++ g_return_val_if_fail (screen->info != NULL, NULL); ++ + return screen->info->crtcs; + } + + RWOutput ** + rw_screen_list_outputs (RWScreen *screen) + { ++ g_return_val_if_fail (screen != NULL, NULL); ++ g_return_val_if_fail (screen->info != NULL, NULL); ++ + return screen->info->outputs; + } + +@@ -492,6 +517,9 @@ rw_screen_get_crtc_by_id (RWScreen *scre + { + int i; + ++ g_return_val_if_fail (screen != NULL, NULL); ++ g_return_val_if_fail (screen->info != NULL, NULL); ++ + for (i = 0; screen->info->crtcs[i] != NULL; ++i) + { + if (screen->info->crtcs[i]->id == id) +@@ -507,6 +535,9 @@ rw_screen_get_output_by_id (RWScreen *sc + { + int i; + ++ g_return_val_if_fail (screen != NULL, NULL); ++ g_return_val_if_fail (screen->info != NULL, NULL); ++ + for (i = 0; screen->info->outputs[i] != NULL; ++i) + { + if (screen->info->outputs[i]->id == id) +@@ -521,7 +552,8 @@ static RWOutput * + output_new (ScreenInfo *info, RROutput id) + { + RWOutput *output = g_new0 (RWOutput, 1); +- ++ g_return_val_if_fail (output != NULL, NULL); ++ + output->id = id; + output->info = info; + +@@ -659,12 +691,16 @@ output_free (RWOutput *output) + guint32 + rw_output_get_id (RWOutput *output) + { ++ g_assert(output != NULL); ++ + return output->id; + } + + const guint8 * + rw_output_get_edid_data (RWOutput *output) + { ++ g_return_val_if_fail (output != NULL, NULL); ++ + return output->edid_data; + } + +@@ -674,6 +710,9 @@ rw_screen_get_output_by_name (RWScreen + { + int i; + ++ g_return_val_if_fail (screen != NULL, NULL); ++ g_return_val_if_fail (screen->info != NULL, NULL); ++ + for (i = 0; screen->info->outputs[i] != NULL; ++i) + { + RWOutput *output = screen->info->outputs[i]; +@@ -688,6 +727,8 @@ rw_screen_get_output_by_name (RWScreen + RWCrtc * + rw_output_get_crtc (RWOutput *output) + { ++ g_return_val_if_fail (output != NULL, NULL); ++ + return output->current_crtc; + } + +@@ -697,7 +738,7 @@ rw_output_get_current_mode (RWOutput *ou + RWCrtc *crtc; + + g_return_val_if_fail (output != NULL, NULL); +- ++ + if ((crtc = rw_output_get_crtc (output))) + return rw_crtc_get_current_mode (crtc); + +@@ -712,7 +753,7 @@ rw_output_get_position (RWOutput + RWCrtc *crtc; + + g_return_if_fail (output != NULL); +- ++ + if ((crtc = rw_output_get_crtc (output))) + rw_crtc_get_position (crtc, x, y); + } +@@ -720,24 +761,28 @@ rw_output_get_position (RWOutput + const char * + rw_output_get_name (RWOutput *output) + { ++ g_assert (output != NULL); + return output->name; + } + + int + rw_output_get_width_mm (RWOutput *output) + { ++ g_assert (output != NULL); + return output->width_mm; + } + + int + rw_output_get_height_mm (RWOutput *output) + { ++ g_assert (output != NULL); + return output->height_mm; + } + + RWMode * + rw_output_get_preferred_mode (RWOutput *output) + { ++ g_return_val_if_fail (output != NULL, NULL); + if (output->n_preferred) + return output->modes[0]; + +@@ -747,12 +792,14 @@ rw_output_get_preferred_mode (RWOutput * + RWMode ** + rw_output_list_modes (RWOutput *output) + { ++ g_return_val_if_fail (output != NULL, NULL); + return output->modes; + } + + gboolean + rw_output_is_connected (RWOutput *output) + { ++ g_return_val_if_fail (output != NULL, FALSE); + return output->connected; + } + +@@ -936,12 +983,14 @@ rw_crtc_get_position (RWCrtc *c + RWRotation + rw_crtc_get_current_rotation (RWCrtc *crtc) + { ++ g_assert(crtc != NULL); + return crtc->current_rotation; + } + + RWRotation + rw_crtc_get_rotations (RWCrtc *crtc) + { ++ g_assert(crtc != NULL); + return crtc->rotations; + } + +@@ -949,6 +998,7 @@ gboolean + rw_crtc_supports_rotation (RWCrtc * crtc, + RWRotation rotation) + { ++ g_return_val_if_fail (crtc != NULL, FALSE); + return (crtc->rotations & rotation); + } + +@@ -956,7 +1006,8 @@ static RWCrtc * + crtc_new (ScreenInfo *info, RROutput id) + { + RWCrtc *crtc = g_new0 (RWCrtc, 1); +- ++ g_return_val_if_fail (crtc != NULL, NULL); ++ + crtc->id = id; + crtc->info = info; + +@@ -1028,6 +1079,7 @@ static RWMode * + mode_new (ScreenInfo *info, RRMode id) + { + RWMode *mode = g_new0 (RWMode, 1); ++ g_return_val_if_fail (mode != NULL, NULL); + + mode->id = id; + mode->info = info; +@@ -1038,30 +1090,35 @@ mode_new (ScreenInfo *info, RRMode id) + guint32 + rw_mode_get_id (RWMode *mode) + { ++ g_return_val_if_fail (mode != NULL, 0); + return mode->id; + } + + guint + rw_mode_get_width (RWMode *mode) + { ++ g_return_val_if_fail (mode != NULL, 0); + return mode->width; + } + + int + rw_mode_get_freq (RWMode *mode) + { ++ g_return_val_if_fail (mode != NULL, 0); + return (mode->freq) / 1000; + } + + guint + rw_mode_get_height (RWMode *mode) + { ++ g_return_val_if_fail (mode != NULL, 0); + return mode->height; + } + + static void + mode_initialize (RWMode *mode, XRRModeInfo *info) + { ++ g_return_if_fail(mode != NULL); + mode->name = g_strdup (info->name); + mode->width = info->width; + mode->height = info->height; +@@ -1071,6 +1128,7 @@ mode_initialize (RWMode *mode, XRRModeIn + static void + mode_free (RWMode *mode) + { ++ g_return_if_fail(mode != NULL); + g_free (mode->name); + g_free (mode); + } --- gnome-desktop-2.22.2.orig/debian/patches/106_gd-randr-fix-xgl.patch +++ gnome-desktop-2.22.2/debian/patches/106_gd-randr-fix-xgl.patch @@ -0,0 +1,33 @@ +diff -Nur -x '*.orig' -x '*~' gnome-desktop-2.22.1/libgnome-desktop/randrwrap.c gnome-desktop-2.22.1.new/libgnome-desktop/randrwrap.c +--- gnome-desktop-2.22.1/libgnome-desktop/randrwrap.c 2008-04-10 11:05:13.000000000 +0100 ++++ gnome-desktop-2.22.1.new/libgnome-desktop/randrwrap.c 2008-04-10 11:05:21.000000000 +0100 +@@ -220,7 +220,7 @@ + &(info->max_width), + &(info->max_height))) { + /* XRR caught an error */ +- g_print("Error: X was unable to determine screen size range for window %d\n", xroot); ++ //g_print("Error: X was unable to determine screen size range for window %d\n", xroot); + return False; + } + +@@ -228,7 +228,7 @@ + if (gdk_error_trap_pop ()) + { + /* Unhandled X Error was generated */ +- g_print("Error: X Error received when attempting to get screen size range for window %d\n", xroot); ++ //g_print("Error: X Error received when attempting to get screen size range for window %d\n", xroot); + return False; + } + +@@ -424,7 +424,10 @@ + screen->randr_event_base = event_base; + + screen->info = screen_info_new (screen); +- ++ ++ if (!(screen->info)) ++ return NULL; ++ + XRRSelectInput (screen->xdisplay, + screen->xroot, + RRScreenChangeNotifyMask | --- gnome-desktop-2.22.2.orig/debian/patches/90_from_svn_zoomed_wallpaper_correctly_centered.patch +++ gnome-desktop-2.22.2/debian/patches/90_from_svn_zoomed_wallpaper_correctly_centered.patch @@ -0,0 +1,40 @@ +--- trunk/libgnome-desktop/gnome-bg.c 2008/05/05 14:52:57 5072 ++++ trunk/libgnome-desktop/gnome-bg.c 2008/05/05 15:07:18 5073 +@@ -310,10 +310,6 @@ + new = pixbuf_scale_to_min (pixbuf, width, height); + break; + +- case GNOME_BG_PLACEMENT_CENTERED: +- new = g_object_ref (pixbuf); +- break; +- + case GNOME_BG_PLACEMENT_FILL_SCREEN: + new = gdk_pixbuf_scale_simple (pixbuf, width, height, + GDK_INTERP_BILINEAR); +@@ -323,6 +319,7 @@ + new = pixbuf_scale_to_fit (pixbuf, width, height); + break; + ++ case GNOME_BG_PLACEMENT_CENTERED: + case GNOME_BG_PLACEMENT_TILED: + default: + new = g_object_ref (pixbuf); +@@ -1489,15 +1486,11 @@ + if (height < 0) + height = gdk_pixbuf_get_height (src); + +- if (dest_x < 0) { +- offset_x -= dest_x; ++ if (dest_x < 0) + dest_x = 0; +- } + +- if (dest_y < 0) { +- offset_y -= dest_y; ++ if (dest_y < 0) + dest_y = 0; +- } + + if (dest_x + width > dest_width) { + width = dest_width - dest_x; + --- gnome-desktop-2.22.2.orig/debian/gnome-about.install +++ gnome-desktop-2.22.2/debian/gnome-about.install @@ -0,0 +1,6 @@ +debian/tmp/usr/bin +debian/tmp/usr/share/gnome-about/*.png +debian/tmp/usr/share/gnome-about/*.list +debian/tmp/usr/share/gnome-about/headers +debian/tmp/usr/share/man/man1/gnome-about.1 +debian/tmp/usr/share/applications/gnome-about.desktop --- gnome-desktop-2.22.2.orig/debian/copyright +++ gnome-desktop-2.22.2/debian/copyright @@ -0,0 +1,40 @@ +This package was debianized by Jim Pick jim@jimpick.com on Sat, 14 Mar +1998 20:12:23 -0800. Taken over by Raphael Hertzog + on Wed, 22 Sep 1999 13:24:34 +0200, and taken +over again by James LewisMoss on October 26, 1999. + +It was downloaded from . + +Copyright Holder: + Copyright (C) 1999, 2000 Red Hat Inc. + Copyright (C) 2001 Sid Vicious + Copyright (C) 1999 Free Software Foundation + Copyright (C) 2002, Sun Microsystems, Inc. + Copyright (C) 2003, Kristian Rietveld + +Upstream Authors: + Elliot Lee + George Lebl + John Ellis + Havoc Pennington + Anders Carlsson + +License: + + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + --- gnome-desktop-2.22.2.orig/debian/watch +++ gnome-desktop-2.22.2/debian/watch @@ -0,0 +1,4 @@ +version=2 +http://ftp.gnome.org/pub/GNOME/sources/gnome-desktop/([\d\.]+)[02468]/ \ + gnome-desktop-(.*)\.tar\.gz \ + debian uupdate --- gnome-desktop-2.22.2.orig/debian/control +++ gnome-desktop-2.22.2/debian/control @@ -0,0 +1,70 @@ +Source: gnome-desktop +Section: gnome +Priority: optional +Maintainer: Ubuntu Desktop Team +XSBC-Original-Maintainer: Ondřej Surý +Uploaders: Debian GNOME Maintainers +Standards-Version: 3.7.3 +Build-Depends: debhelper (>= 5), + libglib2.0-dev (>= 2.15.4), + intltool (>= 0.35.0), + libgnomeui-dev (>= 2.14.1-1), + scrollkeeper, + cdbs (>= 0.4.41), + gnome-pkg-tools (>= 0.10), + gtk-doc-tools (>= 1.4), + docbook-xml, + gnome-doc-utils (>= 0.3.2), + libgtk2.0-dev (>= 2.11.3), + libstartup-notification0-dev (>= 0.5), + libxml2-dev (>= 2.4.20), + libgconf2-dev (>= 2.0.0), + python + +Package: gnome-about +Architecture: any +Depends: ${misc:Depends}, + ${shlibs:Depends}, + gnome-desktop-data (= ${source:Version}) +Conflicts: gnome-core (<< 1.5), + gnome-desktop-data (<< 2.12) +Replaces: gnome-desktop-data (<< 2.12) +Description: The GNOME about box + Informative little about thing that lets us brag to our friends as our name + scrolls by, and lets users click to load the GNOME home pages. + +Package: gnome-desktop-data +Architecture: all +Depends: ${misc:Depends} +Conflicts: gnome-panel (<= 2.0.0), + gnome-core (<< 1.5), + gnome-help (<< 1.5) +Replaces: gnome-control-center (<= 1:2.0.3.2-2), + gnome-core (<= 1.5), + gnome-panel-data (<= 2.0), + gnome-about (<< 1:2.21.2) +Description: Common files for GNOME 2 desktop apps + This package includes some files that are shared between several GNOME 2 + apps (Pixmaps, .desktop files and internationalization files). + +Package: libgnome-desktop-2 +Section: libs +Architecture: any +Depends: ${misc:Depends}, + ${shlibs:Depends} +Replaces: libpanel-applet2 (<= 1.5.4-1) +Breaks: gnome-control-center (<< 1:2.22.0-0ubuntu6) +Description: Utility library for loading .desktop files - runtime files + This library is used by GNOME 2 to load the .desktop files. + +Package: libgnome-desktop-dev +Section: libdevel +Architecture: any +Depends: ${misc:Depends}, + libgnome-desktop-2 (= ${binary:Version}), + libgnomeui-dev (>= 2.14.1-1), + libstartup-notification0-dev (>= 0.5) +Replaces: libpanel-applet2-dev (<= 1.5.4-1) +Description: Utility library for loading .desktop files - development files + This packages provides the include files and static library for the GNOME 2 + desktop library functions. --- gnome-desktop-2.22.2.orig/debian/rules +++ gnome-desktop-2.22.2/debian/rules @@ -0,0 +1,17 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/simple-patchsys.mk +include /usr/share/cdbs/1/class/gnome.mk +include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk +include /usr/share/gnome-pkg-tools/1/rules/clean-la.mk +-include /usr/share/gnome-pkg-tools/1/rules/gnome-get-source.mk + +DEB_DH_MAKESHLIBS_ARGS_libgnome-desktop-2 += -V 'libgnome-desktop-2 (>= 1:2.21.4)' + +LDFLAGS += -Wl,-z,defs -Wl,-O1 -Wl,--as-needed + +DEB_CONFIGURE_EXTRA_FLAGS += \ + --with-gnome-distributor=Ubuntu \ + --disable-scrollkeeper \ + --disable-gtk-doc --- gnome-desktop-2.22.2.orig/debian/libgnome-desktop-dev.install +++ gnome-desktop-2.22.2/debian/libgnome-desktop-dev.install @@ -0,0 +1,5 @@ +debian/tmp/usr/include +debian/tmp/usr/lib/pkgconfig +debian/tmp/usr/lib/libgnome-desktop-2.a +debian/tmp/usr/lib/libgnome-desktop-2.so +debian/tmp/usr/share/gtk-doc --- gnome-desktop-2.22.2.orig/debian/changelog +++ gnome-desktop-2.22.2/debian/changelog @@ -0,0 +1,1792 @@ +gnome-desktop (1:2.22.2-0ubuntu1) hardy-updates; urgency=low + + * New upstream version (lp: #235073): + libgnome-desktop + - Fix leak in GnomeBG + gnome-about + - Don't skip the last description from gnome-version.xml + - Convert the strftime() output to UTF-8 + Misc + - Make sure gnome-about/foundation-members.list exists + * debian/patches/100_gd-add-randr-12.patch.orig: + - the serial number is an unsigned int, fix incorrect setup on next login + (lp: #227228) + + -- Sebastien Bacher Mon, 26 May 2008 22:20:23 +0200 + +gnome-desktop (1:2.22.1-0ubuntu6.2) hardy-proposed; urgency=low + + * debian/patches/90_from_svn_zoomed_wallpaper_correctly_centered.patch: + - change from svn, correctly center the zoomed wallpapers (lp: #197357) + + -- Sebastien Bacher Tue, 06 May 2008 10:39:49 +0200 + +gnome-desktop (1:2.22.1-0ubuntu6.1) hardy-proposed; urgency=low + + * Invert the logic in the detection of clone mode so that it works for a + single screen as well. Without this change single screens are always + reported as clone, which makes no sense. (LP: #224186) + + -- James Westby Thu, 17 Apr 2008 12:27:02 +0100 + +gnome-desktop (1:2.22.1-0ubuntu6) hardy; urgency=low + + * When the edid data can be retrived but not parsed it returns NULL. Add + a check for this to avoid a crash and give higher level code the chance + to cope with it. (LP: #215751) + This is debian/patches/107_gd-randr-handle-unparseable-edid.patch + * Remove some debugging print statements from the code to not clutter the + user's terminal when they run the display capplet. + This is debian/patches/108_gd-randr-remove-prints.patch + + -- James Westby Tue, 15 Apr 2008 11:31:47 +0100 + +gnome-desktop (1:2.22.1-0ubuntu5) hardy; urgency=low + + * Fix the randr stuff on Xgl when the screen info can't be retrieved. + (LP: #199960) + + -- James Westby Thu, 10 Apr 2008 10:42:50 +0100 + +gnome-desktop (1:2.22.1-0ubuntu4) hardy; urgency=low + + * debian/patches/105_gd-randr-null-ptrs.patch: + - Add null pointer checks throughout the code (LP: #210226). + - This prevents us from crashing deep in the code due to various + invalid situations that cause NULL ptrs, by passing the failure + back up to the caller. If there are still crashes, this lets us + handle them at a higher level. + + -- Bryce Harrington Wed, 09 Apr 2008 14:46:48 -0700 + +gnome-desktop (1:2.22.1-0ubuntu3) hardy; urgency=low + + * debian/patches/100_gd-add-randr-12.patch: + - calculate correctly the dpi value, thanks Julien Cristau for spotting + the error there (lp: #213745) + + -- Sebastien Bacher Wed, 09 Apr 2008 15:24:07 +0200 + +gnome-desktop (1:2.22.1-0ubuntu2) hardy; urgency=low + + * debian/patches/100_gd-add-randr-12.patch: + - Bring patch up to date with fedora's changes + + Adds more monitors, better detecting of laptop models, + + Check for null pointers in a few places + + Add support for clone mode + + Remove debugging statements + - Change ...ONLY_IN_FEDORA ifdefs to ...NOT_IN_GNOME for clarity + and add appropriate logic so either def will function + + -- Bryce Harrington Tue, 08 Apr 2008 16:00:03 -0700 + +gnome-desktop (1:2.22.1-0ubuntu1) hardy; urgency=low + + * New upstream version: + libgnome-desktop + - Fix compiler warnings + - Handle start time in the future correctly in GnomeBG + + -- Sebastien Bacher Tue, 08 Apr 2008 00:44:40 +0200 + +gnome-desktop (1:2.22.0-0ubuntu6) hardy; urgency=low + + * debian/control.in: + - use breaks on gnome-control-center (<< 1:2.22.0-0ubuntu6) since the + new patch version breaks the abi and gnome-display-properties needs + to be rebuilt + * debian/patches/100_gd-add-randr-12.patch: + - updated the patch using the current redhat version + * debian/patches/101_gd-randr-makefiles.patch: + - updated + + -- Sebastien Bacher Mon, 07 Apr 2008 13:31:29 +0200 + +gnome-desktop (1:2.22.0-0ubuntu5) hardy; urgency=low + + * debian/patches/104_gd-randr-revert-support.patch: + - Adds underlying code for reverting changes if not approved. This + works by writing new changes to a "once only" config file, which + if seen is loaded in preference to the regular monitors.xml file + and removed prior to applying its changes. This way, if a lockup + or other major system issue occurs while applying the changes, on + next boot the system will revert to the prior settings. (LP: #197673) + + -- Bryce Harrington Tue, 01 Apr 2008 12:10:05 -0700 + +gnome-desktop (1:2.22.0-0ubuntu4) hardy; urgency=low + + * debian/libgnome-desktop-2.shlibs: + - updated shlibs version (lp: #187451) + + -- Sebastien Bacher Tue, 01 Apr 2008 23:10:14 +0200 + +gnome-desktop (1:2.22.0-0ubuntu3) hardy; urgency=low + + * debian/patches/103_gd-xrandr-xerror-check.patch: + - Catch X error thrown and exit function gracefully (LP: #199960) + - Don't try to apply store config to undefined screens (LP: #197645) + + -- Bryce Harrington Mon, 17 Mar 2008 15:00:32 -0700 + +gnome-desktop (1:2.22.0-0ubuntu2) hardy; urgency=low + + * debian/patches/100_gd-add-randr-12.patch: + - don't use conflicting variable name, fix the gnome-settings-daemon + and gnome-display-properties xrandr crashers (lp: #198951) + + -- Sebastien Bacher Mon, 17 Mar 2008 14:54:04 +0100 + +gnome-desktop (1:2.22.0-0ubuntu1) hardy; urgency=low + + * New upstream version + + -- Sebastien Bacher Mon, 10 Mar 2008 22:36:49 +0100 + +gnome-desktop (1:2.21.92-0ubuntu3) hardy; urgency=low + + * debian/patches/102_gd-xrandr-null-pointer-check.patch: + - Adds a null pointer check to prevent an assertion at a later point + in the code, which has been causing gnome-settings-daemon to fail + (LP: #197153) + + -- Bryce Harrington Mon, 03 Mar 2008 23:23:39 -0800 + +gnome-desktop (1:2.21.92-0ubuntu2) hardy; urgency=low + + * upload redhat xrandr changes to hardy + + [ Bryce Harrington ] + + * debian/patches/100_gd-add-randr-12.patch: + - Adds EDID utilities, a monitor name database, and xrandr 1.2 support + * debian/patches/101_gd-randr-makefiles.patch: + - Makefile changes for patch 100. Patched separately since patch 100 + is generated programmatically from RedHat's source. + + -- Sebastien Bacher Fri, 29 Feb 2008 15:46:45 +0100 + +gnome-desktop (1:2.21.92-0ubuntu1) hardy; urgency=low + + * New upstream version: + libgnome-desktop + - Fix crash in GnomeBG + - Fix GnomeBG gio port + gnome-about + - Fix translator comment not available in po files + - Fix TypeError crasher in a print statement (lp: #182354) + Misc + - Use gvfs-copy instead of gnomevfs-copy in autogen.sh + * debian/patches/90_from_svn_fix_unref_null_value.patch, + debian/patches/91_from_svn_use_uris_for_gio.patch: + - dropped, fixed in the new version + + -- Sebastien Bacher Tue, 26 Feb 2008 23:01:11 +0100 + +gnome-desktop (1:2.21.91-0ubuntu2) hardy; urgency=low + + * debian/patches/90_from_svn_fix_unref_null_value.patch: + - change from SVN, fix crasher to an incorrect unref use + * debian/patches/91_from_svn_use_uris_for_gio.patch: + - change from SVN, fix appearance capplet background rendering issue + (lp: #191425) + + -- Sebastien Bacher Wed, 13 Feb 2008 17:14:25 +0100 + +gnome-desktop (1:2.21.91-0ubuntu1) hardy; urgency=low + + * New upstream version: + libgnome-desktop + - Fix invalid read + - Fix compilation issue caused by some headers + - Port to gio + - Fix crash in GnomeBG when file is empty (lp: #189191) + gnome-about + - Add back a --version option (lp: #175235) + Misc + - Require gio, and get rid of gnome-vfs + * debian/control.in: + - don't use gnomevfs + - updated libglib requirement + + -- Sebastien Bacher Mon, 11 Feb 2008 23:12:02 +0100 + +gnome-desktop (1:2.21.90-0ubuntu1) hardy; urgency=low + + * New upstream release (LP: #186487) + - libgnome-desktop + + Add GNOME_DESKTOP_USE_UNSTABLE_API API guard for GnomeBg + - Misc + + Fix test for gnomevfs-copy in autogen.sh (Jonathon Jongsma) + * Bump to Standards-Version 3.7.3 + + -- Pedro Fragoso Mon, 28 Jan 2008 00:35:54 +0000 + +gnome-desktop (1:2.21.5-0ubuntu1) hardy; urgency=low + + * New upstream version: + gnome-about + - Don't keep the window centered + - Fix problem when the color of the logo is wrong when changing theme + - Cleanups + - Slow down a bit the animation for the description so people can + actually read it + Misc + - Add check for X11 libraries + Translators + * debian/patches/01_build_use_x11.patch: + - dropped, fixed in the new version + + -- Sebastien Bacher Tue, 15 Jan 2008 09:25:30 +0100 + +gnome-desktop (1:2.21.4-0ubuntu1) hardy; urgency=low + + * New upstream version: + libgnome-desktop + - New GnomeBG API + * debian/patches/01_build_use_x11.patch: + - fix build issue + * debian/rules: + - updated shlibs version + + -- Sebastien Bacher Thu, 20 Dec 2007 11:19:33 +0100 + +gnome-desktop (1:2.21.2-0ubuntu1) hardy; urgency=low + + * New upstream version: + gnome-about + - Rewritten in python. It is at last accessible. And it looks a bit + better now. (LP: #3223) + Misc + - The libgnomecanvas dependency has been removed. + Translators + * Sync with Debian + * debian/control.in: + - Build-Depends on python and not on libgnomecanvas2-dev (>= 2.0.0) + - package maintained by the Ubuntu Desktop Team + - Replaces gnome-about rather than Conflicts and update version number + * debian/libgnome-desktop-dev.install: + - install html documentation + * debian/patches/01_desktopfile_gettext.patch: + - gettext support for desktop files. + * debian/rules: + - use "Ubuntu" as distributor + + -- Sebastien Bacher Wed, 14 Nov 2007 16:51:54 +0100 + +gnome-desktop (2.20.1-1) unstable; urgency=low + + * New upstream bugfix release. + + -- Sebastian Dröge Fri, 26 Oct 2007 19:03:07 +0200 + +gnome-desktop (2.20.0-2) unstable; urgency=low + + * Move gnome-version.xml to gnome-desktop-data. This is required for + bug-buddy. + * gnome-about depends on gnome-desktop-data. + + -- Josselin Mouette Fri, 21 Sep 2007 21:09:03 +0200 + +gnome-desktop (2.20.0-1) unstable; urgency=low + + [ Loic Minier ] + * Don't include autotools.mk as it's already included by gnome.mk. + + [ Sebastian Dröge ] + * New upstream release: + + debian/control.in: + - Add libgconf2-dev to build dependencies, bump the minimum required + version of libglib2.0-dev and libgtk2.0-dev as specified in + configure.in. + * debian/control.in: + + Use ${binary:Version} instead of ${Source-Version} to make lintian happy. + + -- Sebastian Dröge Fri, 21 Sep 2007 09:52:59 +0200 + +gnome-desktop (2.18.3-1) unstable; urgency=low + + [ Josselin Mouette ] + * 99_ltmain_as-needed.patch: get --as-needed back to work. + + [ Loic Minier ] + * New upstream stable release; translation. + + -- Loic Minier Tue, 03 Jul 2007 21:53:55 +0200 + +gnome-desktop (2.18.2-1) unstable; urgency=low + + * New stable release; no API change. + * Wrap configure flags. + + -- Loic Minier Mon, 28 May 2007 16:08:59 +0200 + +gnome-desktop (2.18.1-1) unstable; urgency=low + + * New upstream release. + + -- Sebastian Dröge Wed, 25 Apr 2007 07:18:49 +0200 + +gnome-desktop (2.18.0-2) unstable; urgency=low + + * Upload to unstable; drop check-dist include. + * Wrap build-deps and deps. + * Fix URL in copyright. + + -- Loic Minier Sat, 14 Apr 2007 15:41:23 +0200 + +gnome-desktop (2.18.0-1) experimental; urgency=low + + * Drop duplicate scrollkeeper build-dep. + * New upstream major stable release; fixes and translations; API additions. + - Set shlibs to libgnome-desktop-2 (>= 2.17.5). + * Bump up Debhelper compatibility level to 5. + * Set LDFLAGS directly and not via DEB_CONFIGURE_SCRIPT_ENV; build-depend on + cdbs >= 0.4.41. + * Drop useless version computation from rules. + + -- Loic Minier Sat, 17 Mar 2007 14:08:08 +0100 + +gnome-desktop (2.16.3-1) experimental; urgency=low + + * Add a get-orig-source target to retrieve the upstream tarball. + * Include the new check-dist Makefile to prevent accidental uploads to + unstable; bump build-dep on gnome-pkg-tools to >= 0.10. + * Merge 2.14.3-2; SVN r8331:8963. + - Drop patch 01_ml.po, obsolete. + * New upstream stable release; bug fixes and translations. + - Build-depend on libxml2-dev >= 2.4.20. + + -- Loic Minier Sat, 17 Mar 2007 13:40:59 +0100 + +gnome-desktop (2.16.2-1) experimental; urgency=low + + * New upstream release. + + -- Josselin Mouette Sun, 3 Dec 2006 21:55:03 +0100 + +gnome-desktop (2.16.0-1) experimental; urgency=low + + * New upstream release. + * Bump intltool requirement to 0.35.0. + * Remove orbit and bonobo requirements. + * Require gnome-pkg-tools 0.7 and use clean-la.mk. + + -- Josselin Mouette Tue, 12 Sep 2006 22:18:19 +0200 + +gnome-desktop (2.15.91-1) experimental; urgency=low + + * New upstream development releases; no API changes. + - Target at experimental. + + -- Loic Minier Sun, 13 Aug 2006 21:23:21 +0200 + +gnome-desktop (2.14.3-2) unstable; urgency=low + + [ Loic Minier ] + * Add a get-orig-source target to retrieve the upstream tarball. + + [ Josselin Mouette ] + * 01_ml.po.patch: new Malayalam translation from പ്രവീണ്‍|Praveen എ|A + (closes: #408107). + + -- Josselin Mouette Thu, 15 Feb 2007 19:23:17 +0100 + +gnome-desktop (2.14.3-1) unstable; urgency=low + + * New upstream release; no API changes. + + -- Loic Minier Tue, 8 Aug 2006 10:19:28 +0200 + +gnome-desktop (2.14.2-2) unstable; urgency=low + + * Stop shipping *.la files as libeel2-dev and libnautilus-extension-dev were + rebuilt without these. + * Fix watch file. + + -- Loic Minier Mon, 26 Jun 2006 22:22:24 +0200 + +gnome-desktop (2.14.2-1) unstable; urgency=low + + * Bump up Standards-Version to 3.7.2. + [debian/control, debian/control.in] + * New upstream release. + - Add missing build-deps on libgtk2.0-dev (>= 2.8.0), libgnomevfs2-dev (>= + 2.0.0), libstartup-notification0-dev (>= 0.5), libgnomecanvas2-dev (>= + 2.0.0), scrollkeeper. + [debian/control, debian/control.in] + - Bump libglib2.0-dev build-dep to >= 2.8.0 and gtk-doc-tools to >= 1.4. + [debian/control, debian/control.in] + * Don't override DEB_CONFIGURE_EXTRA_FLAGS completely. + [debian/rules] + + -- Loic Minier Wed, 31 May 2006 18:29:30 +0200 + +gnome-desktop (2.14.1.1-1) unstable; urgency=low + + * New upstream release. + * [debian.control.in] Bumped the libgnomeui dependencies due to the + libXcursor/libXrender transition. + + -- J.H.M. Dassen (Ray) Fri, 21 Apr 2006 10:46:12 +0200 + +gnome-desktop (2.14.0-1) unstable; urgency=low + + * New upstream GNOME 2.14 release. + + -- Ondřej Surý Mon, 3 Apr 2006 15:02:43 +0200 + +gnome-desktop (2.12.3-1) unstable; urgency=low + + [ Ondřej Surý ] + * Add versioned build dependency on gnome-doc-utils (Closes: #351634) + + [ Loic Minier ] + * New upstream release. + * Add ${misc:Depends} deps. + * Bump up Standards-Version to 3.6.2. + * Ship some serious copyright information. + + -- Loic Minier Wed, 1 Mar 2006 19:26:11 +0100 + +gnome-desktop (2.12.2-2) unstable; urgency=low + + * Upload to unstable. + + -- Ondřej Surý Mon, 6 Feb 2006 14:49:01 +0100 + +gnome-desktop (2.12.2-1) experimental; urgency=low + + * New upstream release + * debian/libgnome-desktop-2.shlibs: + - updated (Closes: #344273) + + -- Guilherme de S. Pastore Wed, 21 Dec 2005 17:31:02 -0200 + +gnome-desktop (2.12.1-1) experimental; urgency=low + + * New upstream version. + * debian/control.in: + - Build-Depends on gnome-doc-utils. + - updated for the packages changes. + - updated the libgnomeui requirement. + * debian/gnome-desktop-data.install, debian/gnome-about.install: + - install the desktop file with the binary. + * debian/rules: + - don't update scrollkeeper files on build. + * debian/watch: + - updated. + + -- Sebastien Bacher Tue, 18 Oct 2005 13:03:21 +0200 + +gnome-desktop (2.10.2-1) unstable; urgency=low + + * Sebastien Bacher: + * New upstream version. + * debian/patches/01_relibtoolise.patch: + - not required. + * Josselin Mouette: + * Pass --as-needed to ld. + * Don't overwrite DEB_CONFIGURE_SCRIPT_ENV completely. + + -- Sebastien Bacher Thu, 30 Jun 2005 19:03:25 +0200 + +gnome-desktop (2.10.2-1) unstable; urgency=low + + * Sebastien Bacher: + * New upstream version. + * debian/patches/01_relibtoolise.patch: + - not required. + * Josselin Mouette: + * Pass --as-needed to ld. + * Don't overwrite DEB_CONFIGURE_SCRIPT_ENV completely. + + -- Sebastien Bacher Thu, 30 Jun 2005 19:03:25 +0200 + +gnome-desktop (2.10.1-2) unstable; urgency=low + + * Upload to unstable. + + -- Ondřej Surý Tue, 7 Jun 2005 16:05:50 +0200 + +gnome-desktop (2.10.1-1) experimental; urgency=low + + * New upstream version. + * debian/libgnome-desktop-2.shlibs: + - updated (Closes: #304449). + * debian/patches/01_relibtoolise.patch: + - updated. + + -- Sebastien Bacher Wed, 13 Apr 2005 16:27:26 +0200 + +gnome-desktop (2.10.0-1) experimental; urgency=low + + * New upstream version. + * debian/control.in: + - updated the requirements. + * debian/gnome-desktop-data.install: + - updated. + * debian/libgnome-desktop-2.shlibs: + - updated. + * debian/patches/01_relibtoolise.patch: + - updated. + * debian/watch: + - updated. + + -- Sebastien Bacher Fri, 8 Apr 2005 17:51:35 +0200 + +gnome-desktop (2.8.3-2) unstable; urgency=high + + * GNOME Team upload. + * debian/control.in: + Build-Depend on libgnomeui-dev (>= 2.8.1-3) to remove dependency on howl. + * Priority high, howl needs to be removed due to license issues. + + -- Sjoerd Simons Wed, 2 Mar 2005 08:39:31 +0100 + +gnome-desktop (2.8.3-1) unstable; urgency=low + + * New upstream version. + + -- Ondřej Surý Thu, 24 Feb 2005 13:48:51 +0100 + +gnome-desktop (2.8.1-2) unstable; urgency=low + + * GNOME team upload. + * Upload to unstable. + + -- Jordi Mallach Fri, 19 Nov 2004 14:30:36 +0100 + +gnome-desktop (2.8.1-1) experimental; urgency=low + + * GNOME team upload. + * New upstream release. + * debian/libgnome-desktop-2.shlibs: bump shlibs, as some symbols have + changed. + * debian/patches/01_relibtoolise.patch: updated. + + -- Jordi Mallach Tue, 19 Oct 2004 17:49:34 +0200 + +gnome-desktop (2.8.0-1) experimental; urgency=low + + * New upstream development release. + * [debian/watch] Updated. + + -- J.H.M. Dassen (Ray) Thu, 16 Sep 2004 20:16:43 +0200 + +gnome-desktop (2.7.91-1) experimental; urgency=low + + * New upstream development release. + + -- J.H.M. Dassen (Ray) Tue, 17 Aug 2004 20:24:09 +0200 + +gnome-desktop (2.7.90-1) experimental; urgency=low + + * New upstream development release. + * [debian/rules] Ensure complete symbol information at build time; make the + linker work a bit harder to speed up dynamic loading. + * [debian/patches/01_relibtoolise.patch] Updated. + + -- J.H.M. Dassen (Ray) Sun, 15 Aug 2004 16:36:33 +0200 + +gnome-desktop (2.7.1-1) experimental; urgency=low + + * GNOME Team upload. + * New (development) upstream release. + * debian/patches/01_relibtoolise.patch: + - updated + + -- Sebastien Bacher Sat, 26 Jun 2004 18:20:17 +0200 + +gnome-desktop (2.6.2-1) unstable; urgency=low + + * New upstream release. + + -- Marc 'HE' Brockschmidt Fri, 18 Jun 2004 12:50:12 +0200 + +gnome-desktop (2.6.1-2) unstable; urgency=low + + * Ondřej Surý + - upload to unstable. + + -- Ondřej Surý Wed, 26 May 2004 15:25:12 +0200 + +gnome-desktop (2.6.1-1) experimental; urgency=low + + * Ondřej Surý + - new upstream release. + - Relibtoolize again for 2.6.1 + - Remove *.files. + * J.H.M. Dassen (Ray): + - [debian/patches/01_relibtoolise.patch] New. Cuts down the direct + dependencies of gnome-about. + * Jordi Mallach: + - [debian/rules] Configure with --with-gnome-distributor=Debian again. + + -- Ondřej Surý Tue, 20 Apr 2004 12:50:06 +0200 + +gnome-desktop (2.6.0-4) experimental; urgency=low + + * Rebuild with correct libgnome-keyring-dev package. + + -- Gustavo Noronha Silva Sat, 27 Mar 2004 08:32:24 -0300 + +gnome-desktop (2.6.0-3) experimental; urgency=low + + * debian/control.in + + Add build dependency on scrollkeeper. + + -- Ondřej Surý Fri, 26 Mar 2004 23:04:53 +0100 + +gnome-desktop (2.6.0-2) experimental; urgency=low + + * Add dependency on docbook-xml and gtk-doc-tools. + + -- Ondřej Surý Wed, 24 Mar 2004 16:33:52 +0100 + +gnome-desktop (2.6.0-1) experimental; urgency=low + + * New upstream release. + + -- Ondřej Surý Wed, 24 Mar 2004 09:45:43 +0100 + +gnome-desktop (2.4.1-9) unstable; urgency=low + + * New maintainer (Closes: #238883) + * Switched to cdbs build system. + + -- Ondřej Surý Tue, 23 Mar 2004 16:15:45 +0000 + +gnome-desktop (2.4.1-8) unstable; urgency=low + + * debian/control set Maintainer to Debian QA Group + + -- Christian Marillat Sat, 20 Mar 2004 09:49:26 +0100 + +gnome-desktop (2.4.1-7) unstable; urgency=low + + * Orphaned package. + + -- Christian Marillat Fri, 19 Mar 2004 15:36:08 +0100 + +gnome-desktop (2.4.1-6) unstable; urgency=low + + * Remove DTD hack now we have xml catalog + + -- Christian Marillat Sun, 8 Feb 2004 10:41:21 +0100 + +gnome-desktop (2.4.1-5) unstable; urgency=low + + * gnome-desktop-data add a replace for gnome-panel-data << 2.0 (Closes: #230096) + + -- Christian Marillat Wed, 28 Jan 2004 18:40:45 +0100 + +gnome-desktop (2.4.1-4) unstable; urgency=low + + * Build with --with-gnome-distributor=Debian (Closes: #217951) + + -- Christian Marillat Sat, 1 Nov 2003 17:09:11 +0100 + +gnome-desktop (2.4.1-3) unstable; urgency=low + + * Update Build-Depends to GNOME 2.4 packages (Closes: #217512) + + -- Christian Marillat Sun, 26 Oct 2003 08:32:40 +0100 + +gnome-desktop (2.4.1-2) unstable; urgency=low + + * Rebuild to remove liblinc dependency in the -dev package + + -- Christian Marillat Sun, 19 Oct 2003 00:07:47 +0200 + +gnome-desktop (2.4.1-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Sat, 18 Oct 2003 01:00:09 +0200 + +gnome-desktop (2.2.2-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Fri, 16 May 2003 17:35:52 +0200 + +gnome-desktop (2.2.1-2) unstable; urgency=low + + * debian/control gnome-desktop-data replaces gnome-core (<= 1.5) (Closes: #186635) + + -- Christian Marillat Fri, 28 Mar 2003 22:33:06 +0100 + +gnome-desktop (2.2.1-1) unstable; urgency=low + + * New upstream release. + * Fix typo in gnome-about (Closes: #184102) + * Fix extra item in launcher (Closes: #184109) + + -- Christian Marillat Tue, 11 Mar 2003 14:58:58 +0100 + +gnome-desktop (2.2.0.1-2) unstable; urgency=low + + * Bug 178956 was in gnome-help not in gnome-help-data (Closes: #178956) + + -- Christian Marillat Thu, 6 Feb 2003 17:21:07 +0100 + +gnome-desktop (2.2.0.1-1) unstable; urgency=low + + * New upstream release. + * Add a Conflicts with gnome-help-data (Closes: #178956) + + -- Christian Marillat Tue, 4 Feb 2003 14:26:27 +0100 + +gnome-desktop (2.2.0-2) unstable; urgency=low + + * Add versioned conflicts for gnome-core (Closes: #178115, #178126) + * Build against the latest libstartup-notification0 (Closes: #178246) + + -- Christian Marillat Sat, 25 Jan 2003 14:16:13 +0100 + +gnome-desktop (2.2.0-1) unstable; urgency=low + + * New upstream release. + * Hack configure to work with mipsel (Closes: #177321) + + -- Christian Marillat Tue, 21 Jan 2003 15:21:03 +0100 + +gnome-desktop (2.1.90-2) unstable; urgency=low + + * Add libstartup-notification0-dev dependency for the -dev package + (Closes: #176710) + * Update libgnomeui-dev version to 2.1.90 in build-depends (Closes: #176732) + + -- Christian Marillat Fri, 17 Jan 2003 16:50:07 +0100 + +gnome-desktop (2.1.90-1) unstable; urgency=low + + * New upstream release. + * Bump Standards-Version to 3.5.8 + * Bump libgnome-desktop name to -2 (was -0) + + -- Christian Marillat Wed, 8 Jan 2003 00:58:51 +0100 + +gnome-desktop (2.0.10-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Fri, 15 Nov 2002 14:32:07 +0100 + +gnome-desktop (2.0.9-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 14 Oct 2002 15:44:42 +0200 + +gnome-desktop (2.0.8-2) unstable; urgency=low + + * Update to standards version 3.5.7 + * debian/control Add a versioned Conflicts: gnome-panel (<= 2.0.0) + + -- Christian Marillat Sat, 28 Sep 2002 19:29:23 +0200 + +gnome-desktop (2.0.8-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Thu, 5 Sep 2002 18:50:11 +0200 + +gnome-desktop (2.0.7-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Tue, 27 Aug 2002 11:06:01 +0200 + +gnome-desktop (2.0.6-2) unstable; urgency=low + + * Build against the latest libgnutls 5 (Closes: #157782) + + -- Christian Marillat Thu, 22 Aug 2002 15:35:41 +0200 + +gnome-desktop (2.0.6-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Thu, 8 Aug 2002 16:39:25 +0200 + +gnome-desktop (2.0.5a-1) unstable; urgency=low + + * I forgot to rename the original tarball + + -- Christian Marillat Wed, 7 Aug 2002 12:46:26 +0200 + +gnome-desktop (2.0.5-1) unstable; urgency=low + + * New upstream releae. + + -- Christian Marillat Mon, 5 Aug 2002 19:31:35 +0200 + +gnome-desktop (2.0.4-3) unstable; urgency=low + + * Remove call to internet DTD by locale DTD + + -- Christian Marillat Fri, 2 Aug 2002 19:32:12 +0200 + +gnome-desktop (2.0.4-2) unstable; urgency=low + + * Recompiled against the latest libgnomevfs to remove libssl dependency. + + -- Christian Marillat Fri, 2 Aug 2002 17:17:04 +0200 + +gnome-desktop (2.0.4-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Tue, 30 Jul 2002 15:23:45 +0200 + +gnome-desktop (2.0.3-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 15 Jul 2002 15:09:05 +0200 + +gnome-desktop (2.0.2-2) unstable; urgency=low + + * Upload to unstable + + -- Christian Marillat Thu, 27 Jun 2002 19:39:17 +0200 + +gnome-desktop (2.0.2-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Wed, 26 Jun 2002 01:29:52 +0200 + +gnome-desktop (2.0.1-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 17 Jun 2002 15:56:37 +0200 + +gnome-desktop (2.0.0-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 10 Jun 2002 16:24:14 +0200 + +gnome-desktop (1.5.22-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Tue, 4 Jun 2002 16:59:29 +0200 + +gnome-desktop (1.5.21-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Tue, 28 May 2002 15:39:27 +0200 + +gnome-desktop (1.5.20-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 20 May 2002 21:57:19 +0200 + +gnome-desktop (1.5.19-1) experimental; urgency=low + + * New upstream release. + * Add support for DEB_HOST_GNU_TYPE DEB_BUILD_GNU_TYPE and + DEB_BUILD_OPTIONS + + -- Christian Marillat Wed, 15 May 2002 20:25:14 +0200 + +gnome-desktop (1.5.18-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 29 Apr 2002 20:23:14 +0200 + +gnome-desktop (1.5.17-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 22 Apr 2002 16:43:21 +0200 + +gnome-desktop (1.5.16-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Wed, 17 Apr 2002 15:29:54 +0200 + +gnome-desktop (1.5.15-1) experimental; urgency=low + + * new upstream release. + + -- Christian Marillat Mon, 1 Apr 2002 22:29:24 +0200 + +gnome-desktop (1.5.14-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Fri, 29 Mar 2002 16:52:31 +0100 + +gnome-desktop (1.5.12-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Tue, 5 Mar 2002 14:32:36 +0100 + +gnome-desktop (1.5.11-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Tue, 26 Feb 2002 15:41:56 +0100 + +gnome-desktop (1.5.10-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Mon, 18 Feb 2002 21:49:27 +0100 + +gnome-desktop (1.5.9-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Sat, 16 Feb 2002 00:58:38 +0100 + +gnome-desktop (1.5.7-1) experimental; urgency=low + + * New upstrema release. + + -- Christian Marillat Tue, 5 Feb 2002 14:41:01 +0100 + +gnome-core2 (1.5.4-1) experimental; urgency=low + + * New upstream release. + + -- Christian Marillat Sun, 20 Jan 2002 16:21:40 +0100 + +gnome-core (1.4.0.4-16) unstable; urgency=low + + * Fix typo in gnome-terminal.wrapper (Closes: #127768) + * Remove gnome-hint patche (Closes: #121390, #129184) + * debian/control Replace libpng-dev by libpng2-dev in Build-Depends + (Closes: #128377) + + -- Christian Marillat Mon, 14 Jan 2002 15:04:52 +0100 + +gnome-core (1.4.0.4-15) unstable; urgency=low + + * Build against the latest gnome-libs to update the libzvt2 dependency + (Closes: #127309, #127271) + * debian/control Replace libpng2-dev by libpng-dev in Build-Depends. + * debian/control Build-depends on libzvt-dev (>= 1.4.1.2-9) + + -- Christian Marillat Tue, 1 Jan 2002 15:27:43 +0100 + +gnome-core (1.4.0.4-14) unstable; urgency=low + + * Fix typo in gnome-terminal.1 (Closes: #123073) + * Fix base page for doc-base in libpanel-applet-dev package. + * Fix typo in gnome-help documentation (Closes: #126566) + * Apply patch to allows meta functionnality in gnome-terminal (Closes: #50427) + + -- Christian Marillat Thu, 27 Dec 2001 14:47:36 +0100 + +gnome-core (1.4.0.4-13) unstable; urgency=low + + * Default font for gnome-terminal is "fixed" only (Closes: #117126) + * Patch against gnome-hint.c Don't use gettext for font descriptor + (Closes: #116606) + * Patch against gnome-about/Makefile.am to use new gdk_pixbuf include path + (Closes: #120312) + * Revert my change on logout.c Only root can shutdown/reboot from the + panel (Closes: #119316, #120127) + + -- Christian Marillat Tue, 20 Nov 2001 11:36:05 +0100 + +gnome-core (1.4.0.4-12) unstable; urgency=low + + * gnome-wm honour --default-wm (Closes: #115668) + * Build against the latest gnome-libs + + -- Christian Marillat Sun, 21 Oct 2001 14:11:19 +0200 + +gnome-core (1.4.0.4-11) unstable; urgency=low + + * debian/control lynx comeback in Recommends (Closes: #114142) + * debian/control replaces xml-i18n-tools by intltool (Closes: #115024) + * Fix automake 1.5 errors. Thanks to Denis Barbier (Closes: #114369) + * Build against the latest orbit (Closes: #115309) + + -- Christian Marillat Fri, 12 Oct 2001 10:46:49 +0200 + +gnome-core (1.4.0.4-10) unstable; urgency=low + + * Fix typo in panel/panel.hints (Closes: #113590) + * Replace lynx by w3m (Closes: #113613) + * Move gnome-terminal.desktop in gnome-terminal package (Closes: #113736) + * Move gnome-help.desktop in gnome-help package + * debian:control Add Replaces: gnome-panel-data (<= 1.4.0.4-9) for above + * Patch against gsm/logout.c Now you can reboot/halt your machine from the + panel. This only work for root, because shutdown doesn't understand the + -a option. Read README.debian in gnome-panel package. + * debian/rules Remove less files in clean target (Closes: #114020) + + -- Christian Marillat Mon, 1 Oct 2001 11:34:06 +0200 + +gnome-core (1.4.0.4-9) unstable; urgency=low + + * Add Debian menu for panel and gmenu (Closes: #112176) + * Remove /var/lib/gnome on purge (Closes: #113005) + * Remove /etc/gnome/config on purge (Closes: #112994) + * Remove /etc/gnome on purge (Closes: #112995) + * debian/control replace cygnus-stylesheets by docbook-utils + + -- Christian Marillat Mon, 24 Sep 2001 18:39:19 +0200 + +gnome-core (1.4.0.4-8) unstable; urgency=high + + * High urgency, because the current release in testing has a missing + dependency on libpanel-applet0 and the panel package doesn't work if + libpanel-applet0 isn't installed (Closes: #111517) + * debian/control for gnome-help, move lynx from depends to recommends + (Closes: #109652) + * debian/control gnome-panel suggests fortune-mod (Closes: #110865) + * debian/control gnome-help suggests gnome-users-guide not + gnome-users-guide-en (Closes: #111200) + * Don't change cursor color (Closes: #97697) + * Change default font for gnome-terminal (Closes: #111319) + + -- Christian Marillat Fri, 7 Sep 2001 15:06:07 +0200 + +gnome-core (1.4.0.4-7) unstable; urgency=low + + * Fix path in gnome-session.1 (Closes: #107724) + * debian/*.sgml Use docbook 4.1 + * debian/control gnome-help-data Replaces gnome-terminal (<= 1.0.55-2) + (CLoses: #107948) + + -- Christian Marillat Wed, 8 Aug 2001 08:07:56 +0200 + +gnome-core (1.4.0.4-6) unstable; urgency=low + + * debian/rules for dh_makeshlibs replace libcapplet0 by libpanel-applet0 + (Closes: #105772) + + -- Christian Marillat Wed, 18 Jul 2001 19:02:59 +0200 + +gnome-core (1.4.0.4-5) unstable; urgency=low + + * Patch against gnome-edit to use EDITOR if the default gnome editor is + unavailable. + * Remove gnome-wm patch, and move the patched file in debian/ + * debian/gnome-wm Try to exec $WINDOW_MANAGER before x-window-manager + (Closes: #103430 + * New patch from Michael Urman to hide task names in tasklist_applet + (Closes: #104587) + + -- Christian Marillat Sat, 14 Jul 2001 16:58:12 +0200 + +gnome-core (1.4.0.4-4) unstable; urgency=low + + * Gnome-help Provides: man-browser, www-browser, info-browser + * Switch to debhelper V3 + * Change libraries versionning to (>= 1.4.0.2-3) instead of the latest + package number. + * Build-depends on groff-base instead of groff + + -- Christian Marillat Fri, 22 Jun 2001 17:02:37 +0200 + +gnome-core (1.4.0.4-3) unstable; urgency=low + + * New patch: Allows to save/load the keyboard secure state (Closes: #83028) + * New patch: Remove a warning in configure + * gnome-help replace gnome-panel-data (Closes: #99499) + * Build-depends on xml-i18n-tools (>= 0.8.4.cvs.20010530-1) (Close: #98784) + + -- Christian Marillat Sat, 2 Jun 2001 14:41:45 +0200 + +gnome-core (1.4.0.4-2) unstable; urgency=low + + * New patch: Replace Distribution by Debian in configuration dialog box. + * New patch: Upstream patch to allow Debian menu in default configuration. + * New patch: Fix some wrong path. + * Move gnome-feedback doc from gnome-help-data to gnome-core. + + -- Christian Marillat Tue, 15 May 2001 15:36:51 +0200 + +gnome-core (1.4.0.4-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Wed, 9 May 2001 23:56:27 +0200 + +gnome-core (1.4.0.3-2) unstable; urgency=low + + * Remove debugging code (/tmp/languages file) + + -- Christian Marillat Mon, 7 May 2001 16:48:18 +0200 + +gnome-core (1.4.0.3-1) unstable; urgency=low + + * New upstream release. + * New: tooltips for long task names in tasklist_applet (Closes: #63898) + + -- Christian Marillat Thu, 3 May 2001 15:51:58 +0200 + +gnome-core (1.4.0.2-3) unstable; urgency=low + + * Fix wrong dif.gz file (Closes: #94499) + * Build against the latest lignome-dev (Closes: #95301, #95691) + * gnome-terminal should depends on gnome-bin (Closes: #95498) + * Doesn't build against gtkhtml this break fonts displaying (Closes: #92187) + + -- Christian Marillat Tue, 1 May 2001 11:03:14 +0200 + +gnome-core (1.4.0.2-2) unstable; urgency=low + + * New/old patch against manpages, never applied by upstream. + * gnome-help depends on lynx. + * Use x-terminal-emulator in gnome-download instead of xterm. + * Move gnome-convert and gnome-download from gnome-core to gnome-help. + * Move gnome-login-check from gnome-core to gnome-session. + * Move gnome-panel-add-launcher from gnome-core to gnome-panel. + * Move sesion-properties* from gnome-core to gnome-session. + * debian/control Add Replaces for the changes above. + * Write manpages (Closes: #87085) + + -- Christian Marillat Tue, 17 Apr 2001 18:54:15 +0200 + +gnome-core (1.4.0.2-1) unstable; urgency=low + + * New upstream release. + * Build-depends on latest gettext (Closes: #93198) + * Icon box in menu editor is back (Closes: #91938) + * Build-depends on latest xml-i18n-tools and libgnome-dev + + -- Christian Marillat Wed, 11 Apr 2001 15:16:20 +0200 + +gnome-core (1.4.0.1-2) unstable; urgency=low + + * Build depends on versionned gettext 0.10.35-17 (Closes: #93198) + * Write manpage for gnome-session and add docbook-to-man in build-depnds + * Write manpages for gnome-help (Closes: #87089) + + -- Christian Marillat Sat, 7 Apr 2001 15:52:40 +0200 + +gnome-core (1.4.0.1-1) unstable; urgency=low + + * New upstream release. + * debian/gnome-terminal.wrapper change -T by -t (Closes: #90847) + * debian/gnome-session.README.debian remove references to .xsession. This + is now obsolete by the new x-session-manager scheme. + + -- Christian Marillat Sun, 1 Apr 2001 15:01:51 +0200 + +gnome-core (1.4.0-2) unstable; urgency=low + + * Build depends on libglade-gnome0-dev (>= 0.16-1) (Closes: #90416) + * debian/control Add Build-Conflicts: libgtkhtml-dev (>= 0.7-1) (Closes: #90700) + + -- Christian Marillat Thu, 22 Mar 2001 16:44:12 +0100 + +gnome-core (1.4.0-1) unstable; urgency=low + + * New upstream release. + * Gnome-core replaces gnome-control-center 1.2.3-1 (Closes: #90124) + * Remove manpages patche included by upstream. + * gnome-session don't always saves session on logout (Closes: #89630) + * Can add a launcher in the panel (Closes: #90018) + * Deskguide don't crashes on Fill with mini-images (Closes: #86952) + * Deskguide don't fail to run (Closes: #89769) + * Pager applet don't fail to run (Closes: #89025) + + -- Christian Marillat Mon, 19 Mar 2001 13:01:26 +0100 + +gnome-core (1.3.1-2) unstable; urgency=low + + * Remove taslisk-applet manpage (Closes: #88994) + * New patch against gnome-terminal.1 (Closes: #89005) + * Move /usr/lib/libtasklist_applet.so in libpanel-applet0 + (Closes: #89053, #89008, #89012, #89091, #89003) + * Gnome-terminal replace gnome-help-data (<= 1.0.55-2) (Closes: #87910) + + -- Christian Marillat Sat, 10 Mar 2001 10:45:14 +0100 + +gnome-core (1.3.1-1) unstable; urgency=low + + * New upstream release. + * Removed default.session patch + * debian/control Add Replaces: gnome-control-center (<= 1.2.2-10), because + the session-properties-capplet is now in this package. + * debian/{postinst,prerm} Call scrollkeeper + * debian/control Add scrollkeeper, xml-i18n-tools and libglade-gnome0-dev in + build-depends and scrollkeeper in depends for gnome-core + * Menu and laucnh keys works now (Closes: #86955) + * Dead keys work in gnome-terminal (Closes: #63102) + * Gnome-terminal isn't broken (Closes: #86752) + * New patch htmlurl.h (This file was broken by upstream author) + * XFMail doesn't crash the tasklist applet in this release (Closes: #88515) + * debian/gnome-core.menu New file for the session properties capplet + + -- Christian Marillat Mon, 5 Mar 2001 11:40:15 +0100 + +gnome-core (1.2.4-11) unstable; urgency=low + + * Update (again) the Build-depends field (Closes: #87419) + * Add a debian directory for the gnome-help-browser and add suggest doc-base + for gnome-help. Now we can watch debian documentation registered with doc-base. + * Add a lintian override file for libpanel-applet0 + + -- Christian Marillat Sun, 25 Feb 2001 16:14:09 +0100 + +gnome-core (1.2.4-10) unstable; urgency=low + + * Update the Build-depends field (Closes: #86441, #87419) + * Call update-alternatives only in remove (gnome-terminal, gnome-session) (Closes: #87327, #87328) + + -- Christian Marillat Sat, 24 Feb 2001 18:03:20 +0100 + +gnome-core (1.2.4-9) unstable; urgency=low + + * Remove abandonned /etc/CORBA/servers/bad-applet.goad (Closes: #84950) + * Build against the latest gnome-libs (1.2.11) (Close: #85932) + + -- Christian Marillat Wed, 14 Feb 2001 13:49:26 +0100 + +gnome-core (1.2.4-8) unstable; urgency=low + + * debian/control Add Replaces: gnome-help-data (<< 1.0.55-2) for + gnome-help (Closes: #80974) + * debian/gnome-help.mime Rewrote (Closes: #82891) + * debian/control gnome-core depends on gnome-bin (Closes: #82951) + * Wrote gnome-panel.README.Debian (Closes: #82954) + + -- Christian Marillat Mon, 22 Jan 2001 16:04:58 +0100 + +gnome-core (1.2.4-7) unstable; urgency=low + + * Added gnome-bin (>= 1.2.0) in gnome-session Depends field (Closes: #80589, #80595, #80733) + + -- Christian Marillat Wed, 27 Dec 2000 19:24:08 +0100 + +gnome-core (1.2.4-6) unstable; urgency=low + + * Apply patch to gnome-run to call x-terminal-emulator (Closes: #80219) + * debian/gnome-terminal.wrapper This is -t not -T close (Closes: #80405) + + -- Christian Marillat Sun, 24 Dec 2000 03:27:12 +0100 + +gnome-core (1.2.4-5) unstable; urgency=low + + * Install gnome-terminal.wrapper as x-terminal-emulator and remove + debian/patches/gnome-terminal.dpatch (Closes: 64326) + Thanks to Eric Gillespie, Jr. + * Add Recommends: gnome-applets on gnome-panel (Closes: #72208) + * gnome-sesion provides x-session-manager and install alternative (Closes: #60667) + * Added hints=Gnome for all menu files. + + -- Christian Marillat Wed, 20 Dec 2000 23:19:55 +0100 + +gnome-core (1.2.4-4) unstable; urgency=low + + * Call x-terminal-emulator in gnome-wm and add depends on the latest debianutils + for gnome-session. Thanks to Joseph Carter for the file + (Closes: #79776) + * Rewrote default.session patch + * Add patch form Doug Larrick for gwmthumbnail.c (Closes: #78550) + + -- Christian Marillat Sun, 17 Dec 2000 12:04:54 +0100 + +gnome-core (1.2.4-3) unstable; urgency=low + + * Change gnome-help.mime to call the right file (Closes: #77986) + Thanks Malcolm Parsons for the patch. + * Patch gsm/default.in (two entries with same id) (Closes: #78276) + Thanks to Normal User (Nice name) + * Move gnome-control-center from Depends to Suggests. + * Remove libgtkhtml-dev from Build-Depends (Closes: #79527) + + -- Christian Marillat Wed, 13 Dec 2000 18:01:34 +0100 + +gnome-core (1.2.4-2) unstable; urgency=low + + * Remove README and NEWS files (Closes: #77250) + * Disable thumbnails by default in deskguide_applet (Closes: #77205) + * debian/rules --with-window-manager is now sawfish (was x-window-manager) + and rewrote debian/patches/gnome-wm.dpatch to remove x-window-manager (Closes: #77401) + * Should close this old bug (Closes: #51198) + * Patch gnome-edit to use x-terminal-emulator instead of xterm. + + -- Christian Marillat Mon, 20 Nov 2000 11:35:55 +0100 + +gnome-core (1.2.4-1) unstable; urgency=low + + * New upstream release. + + -- Christian Marillat Thu, 16 Nov 2000 00:43:15 +0100 + +gnome-core (1.2.3.1-1) unstable; urgency=low + + * New upstream release. + * Add gnome-help example and manpage in gnome-help package (Closes: #49977) + * This release should close these old bugs (Closes: #60561, #60768, #45053) + * Gnome-panel don't use all CPU time (Closes: #75251, #60209) + * Remove gmenu patch included by upstream. + + -- Christian Marillat Wed, 8 Nov 2000 17:09:42 +0100 + +gnome-core (1.2.3-1) unstable; urgency=low + + * New upstream release. + * Debian menus aren't empty (Closes: #70470) + * Launcher can find icon (Closes: #62502) + + -- Christian Marillat Tue, 24 Oct 2000 15:51:11 +0200 + +gnome-core (1.2.2.1-3) unstable; urgency=low + + * Add gnome-terminal.prerm for update-alternatives --remove (Closes: #74451) + * Patch gnome-terminal to accept -T option (Closes: #74450) + * Move README.debian in gnome-session package (Closes: #60440) + * mesg work in gnome-terminal (Closes: #71728) + * Upstream fix these old bugs in Gnome-terminal + Problem with menubar (Closes: #57516) + Problem with console-apt Closes: #60079) + Problem with screen (Closes: #50156) + * Binaries don't should go in /usr/X11R6/bin (Closes: #24031) + Quoting Debian policy : + "Packages using the X Window System should abide by the FHS standard" + "whenever possible; they should install binaries, libraries, manual" + "pages, and other files in FHS-mandated locations wherever possible." + "This means that files must not be installed into /usr/X11R6/bin/'" + * hostname isn't harcoded (Closes: #72536) + * Error messages mention Lynx (Closes: #62216) + * Display correctly deskuse.html (Closes: #49974) + * Add patch from malcolm (Closes: #64820) + + -- Christian Marillat Sat, 14 Oct 2000 23:39:49 +0200 + +gnome-core (1.2.2.1-2) unstable; urgency=low + + * Typo in debian/gnome-terminal.postinst + * Add gnome-terminal manpage (Closes: #69188) + * Closes: #63103 already closed in 1.2.1-0.2 (typo in debian/changelog) + * Gnome-terminal write to /var/run/utmp (Closes: #59053) + * delete/backspace keys works (Closes: #57198) + * Install GnomeHelp file in /etc/gnome/config (Closes: #73012) + * Convert png icons in xpm for Debian menu. + * Rearange documentation for dhelp (Closes: #56672) + + -- Christian Marillat Thu, 5 Oct 2000 00:59:44 +0200 + +gnome-core (1.2.2.1-1) unstable; urgency=low + + * New upstream release. + * Patch all manpages (Closes: #70009) + * gnome-panel 1.0.55-2.0.1 (sparc) is now installable (Closes: #69075, #71570) + * gmenu don't jam up all translations (Closes: #46446) + * panel remember its configuration between session + (Closes: #47734, #54190) + * Icons are now centered (Closes: #63868) + * Bugs closed by previous NMU in gnome-panel (Closes: #40036, #52584, #54755, + #58278, #61083, #69428)) + * libgen_util_applet.so installed in 1.2.1-0.2 (Closes: #69463) + * debian/control remove Conflicts: asclock (Closes: #52077) + * gnome-help 1.0.55-2.0.1 (sparc) is now installable (Closes: #69356) + * Bugs closed by previous NMU in gnome-help (Closes: #49734, #56081, #58679, #58973) + * debian/control move gmc from Recommends to Suggests (Closes: #59415) + * The first search in gnome-wm search is x-window-manager + (Closes: #50940, #65969, #62143) + * Bug closed in 1.2.2-1 (README.debian in gnome-session package) (Closes: #66219) + * Bugs closed by previous NMU in gnome-terminal + (Closes: #64579, #63592, #63332, #56584, #55477, #54428) + * gnome-terminal provide x-terminal-emulator (Closes: #61805, #53994, #56225) + + -- Christian Marillat Wed, 27 Sep 2000 16:02:16 +0200 + +gnome-core (1.2.2-1) unstable; urgency=low + + * New maintainer, thanks James. + * New upstream release. + * Switch to debhelper V2 + * Move README.debian in gnome-session package (Closes: #65235) and + update this file (Closes: #71339) + * Bug closed in 1.2.1-0.2 (Install missing libraries) (Closes: #69590, #70483) + * Bugs closed in 1.2.1-0.1 (typo close instead closes) (Closes: #53764, #54050) + * Remove gtkhtml patch. + * The desk guide show thumbnail (Closes: #72359) + * Missing package under sparc (Closes: #71438) + * debian/control add Conflicts: libgnome32 (<< 1.2.0-1) for gnome-panel (Closes: #72039) + * Added icons in Debian menu. + * Eject in drivemount check if '-u' is available (Closes: #63954) + * Patch gmenu to find Debian menu. + + -- Christian Marillat Tue, 26 Sep 2000 17:34:23 +0200 + +gnome-core (1.2.1-0.2) unstable; urgency=low + + * NMU. + * Install these libraries libfish_applet.so libgen_util_applet.so + libpanel_status.so (Closes: #69428, #69590) + * Copy latest gnome aclocal in macros/ and run macros/autogen.sh + This is needed to build gnome-help-browser against libgtkhtml4. + * In debian/control + gnome-session depends on gnome-panel (>= ${Source-Version}). + gnome-help depends on gnome-core (>= 1.2.0-0.1) no Source-Version. + gnome-terminal don't depends on gnome-core. + * URL's are clickable in gnome-terminal (Closes: 63103). + * debian/gnome-panel.undocumented removed printer_applet.1 + * Cut and paste work in gnome-terminal (Closes: #63592). + + -- Christian Marillat Wed, 23 Aug 2000 21:23:36 +0200 + +gnome-core (1.2.1-0.1) unstable; urgency=low + + * New upstream release (Closes: #58806, #66467) + * NMU. + * Standards-Version to 3.1.1.1 Added Build-depends field. + * Removed patches: dialer, drivemount-floppy, modemlights, term, + help-browser, debian-menu, url-match. + * Added patches: gtkhtml. + * Build against libgtkhtml3. Closes: #58679, #36806, #49734 + * Default manpath and infopath are wrong. Closes: #56081 + * gmenu segfaults. Close: #53764, #54050 + * gnome-panel: panel no longer works. Closes: #58278 + * gnome-panel: gnomepager-applet should put braces around. Closes: #52584 + * Backspace and delete work correctly. Closes: #54428 + * TERM never select xterm-debian. Closes: #56584, #55477, #64579 + * Disable arrows option is now saved. Closes: #54755 + * No more files in /usr/share. Closes: #61083 + * Show debian menus. Closes #66214 + * New help documentation for panel. Closes: #40036 + * Gnome-terminal write to /var/run/utmp. Closes #59053 + * gnome-terminal provide x-terminal-emulator. Closes #61805, #56225 + * README.Debian is here. Closes: #65235 + + -- Christian Marillat Tue, 25 Jul 2000 19:09:21 +0200 + +gnome-core (1.0.55-2) frozen unstable; urgency=low + + * Make x-window-manager run first by gnome-wm script to conform to + debian policy (Closes: #61617) (This is an important bug) + + -- James LewisMoss Sun, 21 May 2000 19:31:19 -0400 + +gnome-core (1.0.55-1) unstable; urgency=low + + * New upstream. + + -- James LewisMoss Sun, 2 Jan 2000 07:32:36 -0500 + +gnome-core (1.0.54-2) unstable; urgency=low + + * Fix the gnome-pager forgets size settings bug (was saved to wrong + section). Closes: #49839, #46845. + + -- James LewisMoss Fri, 12 Nov 1999 07:54:46 -0500 + +gnome-core (1.0.54-1) unstable; urgency=low + + * New upstream. + + -- James LewisMoss Thu, 4 Nov 1999 23:20:14 -0500 + +gnome-core (1.0.53-4) unstable; urgency=low + + * New maintainer. + + -- James LewisMoss Mon, 25 Oct 1999 23:17:31 -0400 + +gnome-core (1.0.53-3) unstable; urgency=low + + * Ok, I made a mistake by setgiding gnome-terminal to + utmp. Reverted the change. Closes: #47960 + + -- Raphael Hertzog Mon, 18 Oct 1999 19:17:27 +0200 + +gnome-core (1.0.53-2) unstable; urgency=low + + * gnome-session does launch a default window-manager. It does launch + gnome-wm if no other information has been found. gnome-wm now + reads the list of window managers from /etc/X11/window-managers + once it has tried gnome compliant wm. Closes: #38347, #47370 + * Patched gnome-terminal. TERM=xterm-debian again ... actually this + closes: #47552, #44960, #41065 + * gnome-terminal is now setgid utmp and can thus register itself + in the UTMP database. Closes: #40507 + * The URL match does now accept % characters. Closes: #47281 + * libpanel-applet0.postinst check for the changelog.gz mysteriously + staying around. Closes: #45871 + * Unreproducable bugs without answer from the submitter. + Closes: #41195, #42865 + + -- Raphael Hertzog Sat, 16 Oct 1999 19:52:38 +0200 + +gnome-core (1.0.53-1) unstable; urgency=low + + * New upstream version. + * gnome-session does now depend on gnome-panel and recommends + gmc (both are needed for a full Gnome desktop). + * gnome-terminal does not have a border. Closes: #38972 + + -- Raphael Hertzog Tue, 12 Oct 1999 21:17:58 +0200 + +gnome-core (1.0.52-1) unstable; urgency=low + + * New maintainer. Steve said that he wanted to give away some of + his packages. I've asked to take gnome-core, he never replied, so + I'm taking it but I will give it back to him if he wanted to + keep it. In the meantime I can better manage bugs with my name + in the Maintainer field. + * New upstream version. + + -- Raphael Hertzog Mon, 4 Oct 1999 21:28:18 +0200 + +gnome-core (1.0.50-0.1) unstable; urgency=low + + * New upstream version. + * NMU again. + + -- Raphael Hertzog Thu, 30 Sep 1999 22:10:03 +0200 + +gnome-core (1.0.41-0.1) unstable; urgency=low + + * New upstream version. + * NMU again. + + -- Raphael Hertzog Mon, 27 Sep 1999 13:10:31 +0200 + +gnome-core (1.0.9-0.1) unstable; urgency=low + + * New upstream version. Closes: #43253, #44098 + * Apply patches before configuring (and relaunch automake && autoconf + because one of the patches is applied on Makefile.am). + * NMU. Thanks to Christian Marillat for his work. + * Imlib bug corrected: closes: #39085 + * X11 binaries don't have to go /usr/X11R6/bin. Closes: #24031 + * The panel does start correctly wihout complaining about a + missing name service. Closes: #39380, #39634, #40478 + * The panel doesn't consume all CPU resources. Closes: #30654 + * The panel launches apps from where it has been launched itself. + Closes: #32319 + * The panel keeps the settings. Closes: #37052, #40579, #43496 + * Old core dump corrected upstream. Closes: #39400, #40328, #42167 + Closes: #44344, #44724, #44732, #44759, #44773 + * Bug in menu-method, not in gnome-panel. Already reported against + menu. Closes: #40089 + * cdplayer_applet works again. Closes: #42192 + * gnome pager works well: Closes: #42499, #42610 + * modem_lights draws itself correctly. Closes: #43861, #45055 + * The dialer applets doesn't exit when stopping while + not yet connected. Closes: #45287 + * No more Debian menu in the panel. Closes: #41040 + * GnomeICU works with this panel. Closes: #39626, #39515 + * gnome-panel-data conflicts with asclock. + Closes: #40712, #40715, #40808, #41430 + A better solution will be needed. Maybe put asclock in his own + package or create a asclock-data package that will be shared. + * Updated the modemlights patch. Closes: #43512 + * Added a patch for gnome-wm. Closes: #38366 + * Move lib{gkb,fish}_applet.so files to libgnome-applet0 (those are + not libraries to be linked with, just simple modules). Closes: #38596 + * Asclock works well without xearth (the code still mentions xearth + however). Closes: #40530 + * New patch (help-browser) for changing the default MANPATH and INFOPATH in + gnome-help-browser.c Closes: #41452 + * Moved help-browser to the new "Help" menu section. + * Added gnome-help.mime. Closes: #42205 + * Gnome-session does launch gnome-panel ! (I suppose that it failed + to launch since panel was broken). Closes: #42937 + * gnome-sesion doesn't core dump. Closes: #36640 + * The terminal does remember the TERM var. Closes: #43067 + * The terminal keeps its size when dragging the manu bar in and out. + Closes: #44762 + * The menu section of gnome-terminal corrected. Closes: #37635 + + -- Raphael Hertzog Wed, 22 Sep 1999 13:24:34 +0200 + +gnome-core (1.0.7-1) unstable; urgency=low + + * New upstream version. + * Removed "term" patch + + -- Steve Haslam Mon, 28 Jun 1999 01:36:31 +0100 + +gnome-core (1.0.6-2) unstable; urgency=low + + * debian-menu.dpatch: created to fix guessing Debian menus + (/etc/menu-methods/gnome-panel now) and to make Debian menus the default + instead of GNOME system menus. + * gnome-help now suggests gnome-users-guide-en (closes: #35724) + * /etc/menu-methods/gnome-panel now creates .directory files and searches + /usr/X11R6/include/X11/pixmaps for menu icons + + -- Steve Haslam Sun, 13 Jun 1999 15:28:52 +0100 + +gnome-core (1.0.6-1) unstable; urgency=low + + * New upstream version. + + -- Steve Haslam Sat, 5 Jun 1999 12:57:08 +0100 + +gnome-core (1.0.5-3) unstable; urgency=low + + * debian/gnome-terminal.menu: managed to lose change mentioned in last + revision. Replaced. + * debian/gnome-core.undocumented: removed gnome-wm.1 (it was in + gnome-session.undocumented too). + + -- Steve Haslam Mon, 31 May 1999 19:15:54 +0100 + +gnome-core (1.0.5-2) unstable; urgency=low + + * debian/gnome-terminal.menu: changed section to XShells (Bug#37635) + * debian/rules: added gnome-wm and gnome-edit to dh_undocumented call + (Bug#37632) + * debian/gnome.menu-method: added patch to honour needs=text (Bug#36928) + from Decklin Foster + * Call dh_strip when making libpanel-applet-dev (Closes Bug#31244) + * Removed /usr/share/gnome/apps/Debian symlink, (closes #38100) + * Sanified build system a la gnome-libs + * debian/control: made gnome-help, gnome-help-data and gnome-panel-data + packages. + + -- Steve Haslam Sun, 23 May 1999 14:35:44 +0100 + +gnome-core (1.0.5-1) unstable; urgency=low + + * New maintainer. + + -- Steve Haslam Tue, 11 May 1999 01:01:12 +0100 + +gnome-core (1.0.5-0.2) unstable; urgency=low + + * gnome-panel.files.in: added asclock themes, libgkb_applet.a + * gnome-core.files.in: added gnome-wm, gnome-edit + * term.dpatch: gnome-terminal TERM to xterm-debian rather than xterm + * gsm/Makefile.am: put default.session, default.wm in /etc/gnome + * debian/gnome-session.conffiles.in: added above two files + * debian/gnome-session.files.in: updated this too + + -- Steve Haslam Sun, 18 Apr 1999 16:47:23 +0100 + +gnome-core (1.0.5-0.1) unstable; urgency=low + + * Non-maintainer upload + * New upstream version + + -- Steve Haslam Thu, 15 Apr 1999 23:22:23 +0100 + +gnome-core (1.0.1-0.3) unstable; urgency=low + + * Weehay! More broken dependencies. This one libghttp -1.1, + a bogus package that only ever existed on my machine. + + -- Jules Bean Mon, 8 Mar 1999 08:24:00 +0000 + +gnome-core (1.0.1-0.2) unstable; urgency=low + + * Another NMU, this time to fix bogus dependencies on libgtop0 + and libglib1.1 + + -- Jules Bean Sun, 7 Mar 1999 14:21:12 +0000 + +gnome-core (1.0.1-0.1) unstable; urgency=low + + * NMU for GNOME-1.0 + * Hacked to patch SIGPIPE bug + * Don't delete GIFs in rules + + -- Jules Bean Fri, 5 Mar 1999 18:36:29 +0100 + +gnome-core (0.99.99pre1.0.0-1) unstable; urgency=low + + * New upstream release. + + -- Jim Pick Fri, 26 Feb 1999 23:18:10 -0800 + +gnome-core (0.99.3.2-4) unstable; urgency=low + + * Recompiled yet again - dual dependency on libglib. + Fixes: BUG#32510 + + -- Jim Pick Thu, 28 Jan 1999 00:00:22 -0800 + +gnome-core (0.99.3.2-3) unstable; urgency=low + + * Recompiled again to due to dependencies. + + -- Jim Pick Sun, 24 Jan 1999 01:10:07 -0800 + +gnome-core (0.99.3.2-2) unstable; urgency=low + + * Recompiled with libgnome 0.99.4. + + -- Jim Pick Fri, 22 Jan 1999 16:44:45 -0800 + +gnome-core (0.99.3.2-1) unstable; urgency=low + + * New upstream release. + + -- Jim Pick Wed, 20 Jan 1999 11:42:46 -0800 + +gnome-core (0.30-2) frozen unstable; urgency=low + + * Recompiled with new libs. + * Fixed reference to /usr/X11R6 in README.Debian. + * Added warnings (Gnome is ALPHA). + * Patched dialer_applet to use pon/poff. + * Patched drivemount_applet to default to /floppy. + + -- Jim Pick Tue, 24 Nov 1998 10:56:08 -0800 + +gnome-core (0.30-1) unstable; urgency=low + + * New upstream release. + + -- Jim Pick Thu, 24 Sep 1998 21:28:02 -0700 + +gnome-core (0.28.1-1) unstable; urgency=low + + * New upstream release. + * Hopefully fixes panel applet bug. + + -- Jim Pick Wed, 19 Aug 1998 20:12:25 -0700 + +gnome-core (0.28-1) unstable; urgency=low + + * New upstream release. + + -- Jim Pick Mon, 17 Aug 1998 12:59:26 -0700 + +gnome-core (0.27-1) unstable; urgency=low + + * New upstream release. + * Added /usr/doc/gnome + + -- Jim Pick Sat, 15 Aug 1998 14:21:06 -0700 + +gnome-core (0.25-1) unstable; urgency=low + + * New upstream release. + + -- Jim Pick Thu, 6 Aug 1998 22:51:22 -0700 + +gnome-core (0.20-2) unstable; urgency=low + + * Added Debian menu-method for gnome-panel. Fixed Bug #24025 + (Thanks to Ray Dassen for reporting the bug, and Riku Voipio + who wrote the menu method for Gnome 0.12) + + -- Jim Pick Wed, 22 Jul 1998 20:22:00 -0700 + +gnome-core (0.20-1) unstable; urgency=low + + * New upstream release. + + -- Jim Pick Mon, 8 Jun 1998 12:00:08 -0700 + +gnome-core (0.13-1) unstable; urgency=low + + * Initial Release. + + -- Jim Pick Mon, 16 Mar 1998 15:27:43 -0800 --- gnome-desktop-2.22.2.orig/debian/gnome-desktop-data.install +++ gnome-desktop-2.22.2/debian/gnome-desktop-data.install @@ -0,0 +1,4 @@ +debian/tmp/usr/share/pixmaps +debian/tmp/usr/share/locale +debian/tmp/usr/share/gnome +debian/tmp/usr/share/gnome-about/*.xml --- gnome-desktop-2.22.2.orig/debian/libgnome-desktop-2.install +++ gnome-desktop-2.22.2/debian/libgnome-desktop-2.install @@ -0,0 +1 @@ +debian/tmp/usr/lib/lib*.so.* --- gnome-desktop-2.22.2.orig/debian/libgnome-desktop-dev.dirs +++ gnome-desktop-2.22.2/debian/libgnome-desktop-dev.dirs @@ -0,0 +1 @@ +usr/share/doc/libpanel-applet2-dev/html --- gnome-desktop-2.22.2.orig/debian/libgnome-desktop-2.shlibs +++ gnome-desktop-2.22.2/debian/libgnome-desktop-2.shlibs @@ -0,0 +1 @@ +libgnome-desktop-2 2 libgnome-desktop-2 (>= 1:2.22) --- gnome-desktop-2.22.2.orig/debian/control.in +++ gnome-desktop-2.22.2/debian/control.in @@ -0,0 +1,70 @@ +Source: gnome-desktop +Section: gnome +Priority: optional +Maintainer: Ubuntu Desktop Team +XSBC-Original-Maintainer: Ondřej Surý +Uploaders: @GNOME_TEAM@ +Standards-Version: 3.7.3 +Build-Depends: debhelper (>= 5), + libglib2.0-dev (>= 2.15.4), + intltool (>= 0.35.0), + libgnomeui-dev (>= 2.14.1-1), + scrollkeeper, + cdbs (>= 0.4.41), + gnome-pkg-tools (>= 0.10), + gtk-doc-tools (>= 1.4), + docbook-xml, + gnome-doc-utils (>= 0.3.2), + libgtk2.0-dev (>= 2.11.3), + libstartup-notification0-dev (>= 0.5), + libxml2-dev (>= 2.4.20), + libgconf2-dev (>= 2.0.0), + python + +Package: gnome-about +Architecture: any +Depends: ${misc:Depends}, + ${shlibs:Depends}, + gnome-desktop-data (= ${source:Version}) +Conflicts: gnome-core (<< 1.5), + gnome-desktop-data (<< 2.12) +Replaces: gnome-desktop-data (<< 2.12) +Description: The GNOME about box + Informative little about thing that lets us brag to our friends as our name + scrolls by, and lets users click to load the GNOME home pages. + +Package: gnome-desktop-data +Architecture: all +Depends: ${misc:Depends} +Conflicts: gnome-panel (<= 2.0.0), + gnome-core (<< 1.5), + gnome-help (<< 1.5) +Replaces: gnome-control-center (<= 1:2.0.3.2-2), + gnome-core (<= 1.5), + gnome-panel-data (<= 2.0), + gnome-about (<< 1:2.21.2) +Description: Common files for GNOME 2 desktop apps + This package includes some files that are shared between several GNOME 2 + apps (Pixmaps, .desktop files and internationalization files). + +Package: libgnome-desktop-2 +Section: libs +Architecture: any +Depends: ${misc:Depends}, + ${shlibs:Depends} +Replaces: libpanel-applet2 (<= 1.5.4-1) +Breaks: gnome-control-center (<< 1:2.22.0-0ubuntu6) +Description: Utility library for loading .desktop files - runtime files + This library is used by GNOME 2 to load the .desktop files. + +Package: libgnome-desktop-dev +Section: libdevel +Architecture: any +Depends: ${misc:Depends}, + libgnome-desktop-2 (= ${binary:Version}), + libgnomeui-dev (>= 2.14.1-1), + libstartup-notification0-dev (>= 0.5) +Replaces: libpanel-applet2-dev (<= 1.5.4-1) +Description: Utility library for loading .desktop files - development files + This packages provides the include files and static library for the GNOME 2 + desktop library functions. --- gnome-desktop-2.22.2.orig/debian/compat +++ gnome-desktop-2.22.2/debian/compat @@ -0,0 +1 @@ +5