Index: xfce4-settings-4.6.5/configure.ac =================================================================== --- xfce4-settings-4.6.5.orig/configure.ac +++ xfce4-settings-4.6.5/configure.ac @@ -97,6 +97,12 @@ dnl *********************************** XDT_CHECK_OPTIONAL_PACKAGE([XRANDR], [xrandr], [1.1.0], [xrandr], [Xrandr support]) +dnl *********************************** +dnl *** Optional support for xxf86vm *** +dnl *********************************** +XDT_CHECK_OPTIONAL_PACKAGE([XXF86VM], [xxf86vm], [1.0.2], + [xxf86vm], [XFree86 Video Mode Extension Library support]) + dnl ************************************** dnl *** Optional support for Libnotify *** dnl ************************************** @@ -281,6 +287,11 @@ echo "* Xrandr support: yes" else echo "* Xrandr support: no" fi +if test x"$XXF86VM_FOUND" = x"yes"; then +echo "* Xrandr support: yes" +else +echo "* Xrandr support: no" +fi if test x"$LIBNOTIFY_FOUND" = x"yes"; then echo "* Libnotify support: yes" else Index: xfce4-settings-4.6.5/dialogs/display-settings/Makefile.am =================================================================== --- xfce4-settings-4.6.5.orig/dialogs/display-settings/Makefile.am +++ xfce4-settings-4.6.5/dialogs/display-settings/Makefile.am @@ -26,7 +26,8 @@ xfce4_display_settings_CFLAGS = \ $(DBUS_GLIB_CFLAGS) \ $(LIBXFCEGUI4_CFLAGS) \ $(XFCONF_CFLAGS) \ - $(XRANDR_CFLAGS) + $(XRANDR_CFLAGS) \ + $(XXF86VM_CFLAGS) xfce4_display_settings_LDFLAGS = \ -no-undefined \ @@ -39,7 +40,8 @@ xfce4_display_settings_LDADD = \ $(DBUS_GLIB_LIBS) \ $(LIBXFCEGUI4_LIBS) \ $(XFCONF_LIBS) \ - $(XRANDR_LIBS) + $(XRANDR_LIBS) \ + $(XXF86VM_LIBS) if MAINTAINER_MODE Index: xfce4-settings-4.6.5/config.h.in =================================================================== --- xfce4-settings-4.6.5.orig/config.h.in +++ xfce4-settings-4.6.5/config.h.in @@ -87,6 +87,9 @@ /* Define if xrandr >= 1.1.0 present */ #undef HAVE_XRANDR +/* Define if xxf86vm >= 1.0.2 present */ +#undef HAVE_XXF86VM + /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR Index: xfce4-settings-4.6.5/dialogs/display-settings/main.c =================================================================== --- xfce4-settings-4.6.5.orig/dialogs/display-settings/main.c +++ xfce4-settings-4.6.5/dialogs/display-settings/main.c @@ -44,6 +44,10 @@ #include "xfce-randr-legacy.h" #include "display-dialog_glade.h" +#if (HAS_RANDR_GAMMA_CORRECTION || HAS_XXVM_GAMMA_CORRECTION) +#include +#endif + /* not available yet */ #undef HAS_RANDR_ONE_POINT_TWO @@ -134,6 +138,24 @@ display_setting_rotations_changed (GtkCo } +void +display_settings_gamma_changed( GtkRange * range, const char * channel) { +#ifdef HAS_XXVM_GAMMA_CORRECTION + gdouble value; + gint no = xfce_randr_legacy->active_screen; + value = gtk_range_get_value(range); + XF86VidModeGamma * gamma; + gamma = &(xfce_randr_legacy->gamma_correction[no]); + if ( strcmp(channel, "red") == 0) + gamma->red = (float)(pow(2.0,value)) ; + else if ( strcmp(channel, "green") == 0) + gamma->green = (float)(pow(2.0,value)) ; + else if ( strcmp(channel, "blue") == 0) + gamma->blue = (float)(pow(2.0,value)) ; + + XF86VidModeSetGamma(gdk_x11_display_get_xdisplay (xfce_randr_legacy->display), no, gamma); +#endif +} static void display_setting_rotations_populate (GladeXML *gxml) @@ -448,6 +470,7 @@ display_settings_treeview_populate (Glad GtkTreeIter iter; gchar *name; GtkTreeSelection *selection; + GtkRange *slider; /* create a new list store */ store = gtk_list_store_new (N_OUTPUT_COLUMNS, @@ -510,6 +533,17 @@ display_settings_treeview_populate (Glad } } + /* the gamma correction sliders */ +#if (HAS_RANDR_GAMMA_CORRECTION || HAS_XXVM_GAMMA_CORRECTION) + n = xfce_randr_legacy->active_screen; + slider = GTK_RANGE( glade_xml_get_widget (gxml, "randr-gamma-red")); + gtk_range_set_value(slider, log2(xfce_randr_legacy->gamma_correction[n].red) ); + slider = GTK_RANGE( glade_xml_get_widget (gxml, "randr-gamma-green")); + gtk_range_set_value(slider, log2(xfce_randr_legacy->gamma_correction[n].green) ); + slider = GTK_RANGE( glade_xml_get_widget (gxml, "randr-gamma-blue")); + gtk_range_set_value(slider, log2(xfce_randr_legacy->gamma_correction[n].blue) ); +#endif + /* release the store */ g_object_unref (G_OBJECT (store)); } @@ -534,7 +568,10 @@ display_settings_combo_box_create (GtkCo gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combobox), renderer, "text", COLUMN_COMBO_NAME); } - +static void +display_settings_slider_create( GtkRange * slider, unsigned short * value) { + return; +} static void display_settings_dialog_response (GtkDialog *dialog, @@ -579,6 +616,7 @@ display_settings_dialog_new_from_xml (Gl GtkCellRenderer *renderer; GtkTreeSelection *selection; GtkWidget *combobox; + GtkWidget *slider; /* get the treeview */ treeview = glade_xml_get_widget (gxml, "randr-outputs"); @@ -614,6 +652,28 @@ display_settings_dialog_new_from_xml (Gl display_settings_combo_box_create (GTK_COMBO_BOX (combobox)); g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (display_setting_rotations_changed), gxml); + /* the gamma correction sliders */ +#if (HAS_RANDR_GAMMA_CORRECTION || HAS_XXVM_GAMMA_CORRECTION) + slider = glade_xml_get_widget (gxml, "randr-gamma-red"); + g_signal_connect(G_OBJECT (slider), "value-changed", G_CALLBACK (display_settings_gamma_changed), "red"); + + slider = glade_xml_get_widget (gxml, "randr-gamma-green"); + g_signal_connect(G_OBJECT (slider), "value-changed", G_CALLBACK (display_settings_gamma_changed), "green"); + + slider = glade_xml_get_widget (gxml, "randr-gamma-blue"); + g_signal_connect(G_OBJECT (slider), "value-changed", G_CALLBACK (display_settings_gamma_changed), "blue"); +#else /* no gamma correction */ + slider = glade_xml_get_widget (gxml, "randr-gamma-red"); + gtk_widget_set_sensitive(slider, FALSE); + + slider = glade_xml_get_widget (gxml, "randr-gamma-green"); + gtk_widget_set_sensitive(slider, FALSE); + + slider = glade_xml_get_widget (gxml, "randr-gamma-blue"); + gtk_widget_set_sensitive(slider, FALSE); +#endif + + /* populate the treeview */ display_settings_treeview_populate (gxml); Index: xfce4-settings-4.6.5/dialogs/display-settings/xfce-randr-legacy.c =================================================================== --- xfce4-settings-4.6.5.orig/dialogs/display-settings/xfce-randr-legacy.c +++ xfce4-settings-4.6.5/dialogs/display-settings/xfce-randr-legacy.c @@ -78,6 +78,9 @@ xfce_randr_legacy_new (GdkDisplay *disp legacy->resolution = g_new0 (SizeID, num_screens); legacy->rate = g_new0 (gshort, num_screens); legacy->rotation = g_new0 (Rotation, num_screens); +#ifdef HAS_XXVM_GAMMA_CORRECTION + legacy->gamma_correction = g_new0 (XF86VidModeGamma, num_screens); +#endif legacy->num_screens = num_screens; legacy->active_screen = 0; @@ -96,6 +99,9 @@ xfce_randr_legacy_new (GdkDisplay *disp legacy->resolution[n] = XRRConfigCurrentConfiguration (legacy->config[n], &rotation); legacy->rate[n] = XRRConfigCurrentRate (legacy->config[n]); legacy->rotation[n] = rotation; +#ifdef HAS_XXVM_GAMMA_CORRECTION + XF86VidModeGetGamma(xdisplay, n, &(legacy->gamma_correction[n])); +#endif } return legacy; @@ -117,6 +123,9 @@ xfce_randr_legacy_free (XfceRandrLegacy g_free (legacy->resolution); g_free (legacy->rate); g_free (legacy->rotation); +#ifdef HAS_XXVM_GAMMA_CORRECTION + g_free (legacy->gamma_correction); +#endif /* free slice */ g_slice_free (XfceRandrLegacy, legacy); @@ -148,6 +157,11 @@ xfce_randr_legacy_reload (XfceRandrLegac /* get the screen config */ legacy->config[n] = XRRGetScreenInfo (xdisplay, GDK_WINDOW_XID (root_window)); + +#ifdef HAS_XXVM_GAMMA_CORRECTION + XF86VidModeGetGamma(xdisplay, n, &(legacy->gamma_correction[n])); +#endif + } } @@ -201,8 +215,20 @@ xfce_randr_legacy_save (XfceRandrLegacy /* save the rotation in degrees */ g_snprintf (property, sizeof (property), "/%s/Screen_%d/Rotation", scheme, n); xfconf_channel_set_int (channel, property, degrees); + +#ifdef HAS_XXVM_GAMMA_CORRECTION + /* save the gamma correction */ + g_snprintf (property, sizeof (property), "/%s/Screen_%d/GammaRed", scheme, n); + xfconf_channel_set_double (channel, property, (double) (legacy->gamma_correction[n].red)); + + g_snprintf (property, sizeof (property), "/%s/Screen_%d/GammaGreen", scheme, n); + xfconf_channel_set_double (channel, property, (double) (legacy->gamma_correction[n].green)); + + g_snprintf (property, sizeof (property), "/%s/Screen_%d/GammaBlue", scheme, n); + xfconf_channel_set_double (channel, property, (double) (legacy->gamma_correction[n].blue)); +#endif } - + /* tell the helper to apply this theme */ xfconf_channel_set_string (channel, "/Schemes/Apply", scheme); } Index: xfce4-settings-4.6.5/dialogs/display-settings/xfce-randr-legacy.h =================================================================== --- xfce4-settings-4.6.5.orig/dialogs/display-settings/xfce-randr-legacy.h +++ xfce4-settings-4.6.5/dialogs/display-settings/xfce-randr-legacy.h @@ -21,6 +21,11 @@ #include #include +#ifndef HAS_XF86VMODE_H +#include +#define HAS_XXVM_GAMMA_CORRECTION 1 +#endif + #ifndef __XFCE_RANDR_LEGACY_H__ #define __XFCE_RANDR_LEGACY_H__ @@ -51,6 +56,9 @@ struct _XfceRandrLegacy SizeID *resolution; gshort *rate; Rotation *rotation; +#ifdef HAS_XXVM_GAMMA_CORRECTION + XF86VidModeGamma *gamma_correction; +#endif }; struct _XfceRotation Index: xfce4-settings-4.6.5/dialogs/display-settings/display-dialog.glade =================================================================== --- xfce4-settings-4.6.5.orig/dialogs/display-settings/display-dialog.glade +++ xfce4-settings-4.6.5/dialogs/display-settings/display-dialog.glade @@ -1,15 +1,16 @@ - - - + + + + Display - GTK_WIN_POS_CENTER_ON_PARENT + center-on-parent 400 350 video-display - GDK_WINDOW_TYPE_HINT_DIALOG + dialog False Configure screen settings and layout @@ -26,9 +27,9 @@ 200 True True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_ETCHED_IN + automatic + automatic + etched-in True @@ -39,6 +40,9 @@ + + 0 + @@ -134,38 +138,175 @@ 1 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + none + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 6 + 6 + + + True + 3 + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Re_d: + True + randr-gamma-red + + + GTK_FILL + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + Increase or decrease the gamma correction channel red of the selected display + discontinuous + 0 -3.32 3.32 0.10000000000000001 1 0 + right + + + 1 + 2 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + _Green: + True + randr-gamma-green + + + 1 + 2 + GTK_FILL + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + _Blue: + True + randr-gamma-blue + + + 2 + 3 + GTK_FILL + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + Increase or decrease the gamma correction channel green of the selected display + discontinuous + 0 -3.32 3.32 0.10000000000000001 1 0 + right + + + 1 + 2 + 1 + 2 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + Increase or decrease the gamma correction channel blue of the selected display + discontinuous + 0 -3.32 3.32 0.10000000000000001 1 0 + right + + + 1 + 2 + 2 + 3 + + + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + <b>Gamma correction</b> + True + + + label_item + + + + + False + 2 + + True - GTK_BUTTONBOX_END + end + gtk-apply + 1 True True True Apply any changes and test the new display settings - gtk-apply True - 1 + + False + False + 0 + + gtk-close True True True - gtk-close True - 0 + False + False 1 False - GTK_PACK_END + end + 0 Index: xfce4-settings-4.6.5/xfce4-settings-helper/displays.c =================================================================== --- xfce4-settings-4.6.5.orig/xfce4-settings-helper/displays.c +++ xfce4-settings-4.6.5/xfce4-settings-helper/displays.c @@ -41,6 +41,11 @@ #undef HAS_RANDR_ONE_POINT_TWO #endif +#ifndef HAS_XF86VMODE_H +#include +#define HAS_XXVM_GAMMA_CORRECTION 1 +#endif + #undef HAS_RANDR_ONE_POINT_TWO static void xfce_displays_helper_class_init (XfceDisplaysHelperClass *klass); @@ -158,6 +163,27 @@ xfce_displays_helper_channel_apply (Xfce } #endif +#ifdef HAS_XXVM_GAMMA_CORRECTION +static void +xfce_displays_helper_set_gamma(const gchar * scheme, gint output, Display * xdisplay, XfconfChannel * channel) { + XF86VidModeGamma gamma; + gchar property[512]; + + g_snprintf (property, sizeof (property), "/%s/Screen_%d/GammaRed", scheme, output); + gamma.red = (float) xfconf_channel_get_double (channel, property, 1.0); + + g_snprintf (property, sizeof (property), "/%s/Screen_%d/GammaGreen", scheme, output); + gamma.green = (float) xfconf_channel_get_double (channel, property, 1.0); + + g_snprintf (property, sizeof (property), "/%s/Screen_%d/GammaBlue", scheme, output); + gamma.blue = (float) xfconf_channel_get_double (channel, property, 1.0); + + XF86VidModeSetGamma(xdisplay, output, &gamma); +} +#else +#define xfce_displays_helper_set_gamma(a, b, c, d) ; +#endif + static void @@ -168,7 +194,7 @@ xfce_displays_helper_channel_apply_legac Display *xdisplay; GdkScreen *screen; XRRScreenConfiguration *config; - gint n, num_screens, s; + gint n, num_screens, num_screens_gdk, num_screens_xfce, s; gchar property[512]; GdkWindow *root_window; gchar *resolution_name; @@ -188,8 +214,12 @@ xfce_displays_helper_channel_apply_legac /* get the number of screens */ g_snprintf (property, sizeof (property), "/%s/NumScreens", scheme); - num_screens = MIN (gdk_display_get_n_screens (display), - xfconf_channel_get_int (helper->channel, property, 0)); + num_screens_xfce = xfconf_channel_get_int (helper->channel, property, -1); + num_screens_gdk = gdk_display_get_n_screens (display); + if (num_screens_xfce == -1) + num_screens = num_screens_gdk; + else + num_screens = MIN (num_screens_gdk, num_screens_xfce); for (n = 0; n < num_screens; n++) { @@ -264,6 +294,8 @@ xfce_displays_helper_channel_apply_legac XRRSetScreenConfigAndRate (xdisplay, config, GDK_WINDOW_XID (root_window), size_id, rotation, rate, CurrentTime); } + + xfce_displays_helper_set_gamma(scheme, n, xdisplay, helper->channel); /* free the screen config */ XRRFreeScreenConfigInfo (config); @@ -294,7 +326,7 @@ xfce_displays_helper_channel_property_ch property = g_strdup_printf ("/%s/Layout", g_value_get_string (value)); layout_name = xfconf_channel_get_string (channel, property, NULL); g_free (property); - + if (G_LIKELY (layout_name)) { if (strcmp (layout_name, "Screens") == 0) @@ -324,6 +356,12 @@ xfce_displays_helper_channel_property_ch /* cleanup */ g_free (layout_name); } +#ifdef HAS_XXVM_GAMMA_CORRECTION + else if (g_value_get_string (value)) /* value should be set, otherwise it's a reset on Apply */ + { /* try to apply settings also without layout_name (used to have a clean reset if there are no xfconf-entries) */ + xfce_displays_helper_channel_apply_legacy(helper, g_value_get_string(value)); + } +#endif /* remove the apply property */ xfconf_channel_reset_property (channel, "/Schemes/Apply", FALSE); Index: xfce4-settings-4.6.5/po/de.po =================================================================== --- xfce4-settings-4.6.5.orig/po/de.po +++ xfce4-settings-4.6.5/po/de.po @@ -143,6 +143,27 @@ msgstr "_Klebrige Tasten verwenden" msgid "Use slow _keys" msgstr "_Verlangsamte Tasten verwenden" +msgid "Re_d:" +msgstr "R_ot:" + +msgid "_Green:" +msgstr "Grü_n:" + +msgid "_Blue:" +msgstr "B_lau:" + +msgid "Gamma correction" +msgstr "Gamma Korrektur" + +msgid "Increase or decrease the gamma correction channel red of the selected display" +msgstr "Verändern der Gamma Korrektur (Kanal rot) der ausgewählten Anzeige" + +msgid "Increase or decrease the gamma correction channel green of the selected display" +msgstr "Verändern der Gamma Korrektur (Kanal grün) der ausgewählten Anzeige" + +msgid "Increase or decrease the gamma correction channel blue of the selected display" +msgstr "Verändern der Gamma Korrektur (Kanal blau) der ausgewählten Anzeige" + #: ../dialogs/accessibility-settings/accessibility-dialog.glade.h:27 msgid "" "When selected, modifier keys (such as Control, Alt, and Shift) do not need " Index: xfce4-settings-4.6.5/xfce4-settings-helper/Makefile.am =================================================================== --- xfce4-settings-4.6.5.orig/xfce4-settings-helper/Makefile.am +++ xfce4-settings-4.6.5/xfce4-settings-helper/Makefile.am @@ -81,6 +81,14 @@ xfce4_settings_helper_LDADD += \ $(XRANDR_LIBS) endif +if HAVE_XXF86VM +xfce4_settings_helper_CFLAGS += \ + $(XXF86VM_CFLAGS) + +xfce4_settings_helper_LDADD += \ + $(XXF86VM_LIBS) +endif + autostartdir = $(sysconfdir)/xdg/autostart autostart_DATA = xfce4-settings-helper-autostart.desktop