diff -urN gsd.orig/data/apps_gnome_settings_daemon_keybindings.schemas.in gsd.new/data/apps_gnome_settings_daemon_keybindings.schemas.in --- gsd.orig/data/apps_gnome_settings_daemon_keybindings.schemas.in 2010-10-15 11:27:47.461830030 +0100 +++ gsd.new/data/apps_gnome_settings_daemon_keybindings.schemas.in 2010-10-15 11:27:53.362405904 +0100 @@ -131,6 +131,17 @@ + + /schemas/apps/gnome_settings_daemon/keybindings/screensaver_alternative + /apps/gnome_settings_daemon/keybindings/screensaver_alternative + string + XF86ScreenSaver + + Lock screen (Alt Binding) + Alternative key binding to lock the screen. + + + /schemas/apps/gnome_settings_daemon/keybindings/help @@ -236,5 +247,16 @@ + + /schemas/apps/gnome_settings_daemon/keybindings/display + /apps/gnome_settings_daemon/keybindings/display + string + XF86Display + + Toggle External Display + Binding to toggle the use of an external display. + + + diff -urN gsd.orig/plugins/media-keys/acme.h gsd.new/plugins/media-keys/acme.h --- gsd.orig/plugins/media-keys/acme.h 2010-10-15 11:27:47.469241631 +0100 +++ gsd.new/plugins/media-keys/acme.h 2010-10-15 11:27:53.363324295 +0100 @@ -46,6 +46,7 @@ STOP_KEY, PREVIOUS_KEY, NEXT_KEY, + DISPLAY_KEY, /* To allow mapping to dispswitch functionality */ HANDLED_KEYS }; @@ -73,6 +74,7 @@ { STOP_KEY, GCONF_BINDING_DIR "/stop", NULL }, { PREVIOUS_KEY, GCONF_BINDING_DIR "/previous", NULL }, { NEXT_KEY, GCONF_BINDING_DIR "/next", NULL }, + { DISPLAY_KEY, GCONF_BINDING_DIR "/display", NULL }, }; #endif /* __ACME_H__ */ diff -urN gsd.orig/plugins/media-keys/gsd-media-keys-manager.c gsd.new/plugins/media-keys/gsd-media-keys-manager.c --- gsd.orig/plugins/media-keys/gsd-media-keys-manager.c 2010-10-15 11:27:47.467649253 +0100 +++ gsd.new/plugins/media-keys/gsd-media-keys-manager.c 2010-10-15 11:27:53.368079533 +0100 @@ -661,6 +661,27 @@ gconf_client_set_bool (client, TOUCHPAD_ENABLED_KEY, !state, NULL); } +static void +do_display_action (GsdMediaKeysManager *manager) +{ + gchar *command; + gchar *dispswitch; + + if ((dispswitch = g_find_program_in_path ("dispswitch")) == NULL ) { + /* Fall back to known location */ + dispswitch = g_strdup("/usr/X11/bin/dispswitch"); + } + + command = g_strdup_printf("%s -toggle", dispswitch ); + + if ( command != NULL ) { + execute (manager, command, FALSE, FALSE); + } + + g_free (dispswitch); + g_free (command); +} + #ifdef HAVE_PULSE static void update_dialog (GsdMediaKeysManager *manager, @@ -997,6 +1018,9 @@ case NEXT_KEY: return do_multimedia_player_action (manager, "Next"); break; + case DISPLAY_KEY: + do_display_action (manager); + break; default: g_assert_not_reached (); } diff -urN gsd.orig/plugins/xrandr/gsd-xrandr-manager.c gsd.new/plugins/xrandr/gsd-xrandr-manager.c --- gsd.orig/plugins/xrandr/gsd-xrandr-manager.c 2010-10-15 11:27:47.481185456 +0100 +++ gsd.new/plugins/xrandr/gsd-xrandr-manager.c 2010-10-15 11:34:56.736605248 +0100 @@ -2248,7 +2248,7 @@ { manager->priv = GSD_XRANDR_MANAGER_GET_PRIVATE (manager); - manager->priv->switch_video_mode_keycode = get_keycode_for_keysym_name (VIDEO_KEYSYM); + manager->priv->switch_video_mode_keycode = 0; /* get_keycode_for_keysym_name (VIDEO_KEYSYM);*/ manager->priv->rotate_windows_keycode = get_keycode_for_keysym_name (ROTATE_KEYSYM); manager->priv->current_fn_f7_config = -1;