diff -ruN gnome-panel-2.22.2/gnome-panel/panel-default-setup.entries gnome-panel-2.22.2-patched/gnome-panel/panel-default-setup.entries --- gnome-panel-2.22.2/gnome-panel/panel-default-setup.entries 2008-05-26 18:10:44.000000000 +0200 +++ gnome-panel-2.22.2-patched/gnome-panel/panel-default-setup.entries 2008-07-22 23:03:45.000000000 +0200 @@ -80,6 +80,13 @@ true + + toplevels/top_panel/disable_movement + /schemas/apps/panel/toplevels/disable_movement + + false + + toplevels/top_panel/orientation /schemas/apps/panel/toplevels/orientation @@ -129,6 +136,13 @@ + toplevels/bottom_panel/disable_movement + /schemas/apps/panel/toplevels/disable_movement + + false + + + toplevels/bottom_panel/orientation /schemas/apps/panel/toplevels/orientation diff -ruN gnome-panel-2.22.2/gnome-panel/panel-profile.c gnome-panel-2.22.2-patched/gnome-panel/panel-profile.c --- gnome-panel-2.22.2/gnome-panel/panel-profile.c 2008-05-26 18:10:44.000000000 +0200 +++ gnome-panel-2.22.2-patched/gnome-panel/panel-profile.c 2008-07-22 22:29:06.000000000 +0200 @@ -551,6 +551,19 @@ gconf_client_unset (client, key, NULL); } +void +panel_profile_set_toplevel_disable_movement (PanelToplevel *toplevel, + gboolean disable_movement) +{ + GConfClient *client; + const char *key; + + client = panel_gconf_get_client (); + key = panel_profile_get_toplevel_key (toplevel, "disable_movement"); + + gconf_client_set_bool (client, key, disable_movement, NULL); +} + char * panel_profile_get_toplevel_name (PanelToplevel *toplevel) { @@ -568,6 +581,19 @@ TOPLEVEL_IS_WRITABLE_FUNC ("name", toplevel, name) +gboolean +panel_profile_get_toplevel_disable_movement (PanelToplevel *toplevel) +{ + + GConfClient *client; + const char *key; + gboolean disable_movement; + client = panel_gconf_get_client (); + + key = panel_profile_get_toplevel_key (toplevel, "disable_movement"); + disable_movement = gconf_client_get_bool (client, key, NULL); + return disable_movement; +} void panel_profile_set_toplevel_orientation (PanelToplevel *toplevel, PanelOrientation orientation) diff -ruN gnome-panel-2.22.2/gnome-panel/panel-profile.h gnome-panel-2.22.2-patched/gnome-panel/panel-profile.h --- gnome-panel-2.22.2/gnome-panel/panel-profile.h 2008-05-26 18:10:44.000000000 +0200 +++ gnome-panel-2.22.2-patched/gnome-panel/panel-profile.h 2008-07-22 22:29:06.000000000 +0200 @@ -83,6 +83,9 @@ panel_profile_get_toplevel_orientation (PanelToplevel *toplevel); gboolean panel_profile_is_writable_toplevel_orientation (PanelToplevel *toplevel); +gboolean panel_profile_get_toplevel_disable_movement (PanelToplevel *toplevel); +void panel_profile_set_toplevel_disable_movement (PanelToplevel *toplevel, gboolean disable_movement); + void panel_profile_set_toplevel_size (PanelToplevel *toplevel, int size); int panel_profile_get_toplevel_size (PanelToplevel *toplevel); diff -ruN gnome-panel-2.22.2/gnome-panel/panel-properties-dialog.c gnome-panel-2.22.2-patched/gnome-panel/panel-properties-dialog.c --- gnome-panel-2.22.2/gnome-panel/panel-properties-dialog.c 2008-05-26 18:10:44.000000000 +0200 +++ gnome-panel-2.22.2-patched/gnome-panel/panel-properties-dialog.c 2008-07-22 22:29:06.000000000 +0200 @@ -74,6 +74,7 @@ guint toplevel_notify; guint background_notify; + guint disable_movement_notify; /* The theme directory of the icon, see bug #119209 */ char *icon_theme_dir; @@ -99,6 +100,10 @@ gconf_client_notify_remove (client, dialog->background_notify); dialog->background_notify = 0; + if (dialog->disable_movement_notify) + gconf_client_notify_remove (client, dialog->disable_movement_notify); + dialog->disable_movement_notify = 0; + if (dialog->properties_dialog) gtk_widget_destroy (dialog->properties_dialog); dialog->properties_dialog = NULL; @@ -150,6 +155,24 @@ } static void +panel_properties_dialog_disable_movement_notify (GConfClient *client, + guint cnxn_id, + GConfEntry *entry, + PanelPropertiesDialog *dialog) +{ + gboolean panel_locked = panel_profile_get_toplevel_disable_movement (dialog->toplevel); + + gtk_widget_set_sensitive (dialog->orientation_combo, !panel_locked); + gtk_widget_set_sensitive (dialog->orientation_label, !panel_locked); + + if (panel_locked) + gtk_widget_show (dialog->writability_warn_general); + else + gtk_widget_hide (dialog->writability_warn_general); + +} + +static void panel_properties_dialog_setup_orientation_combo (PanelPropertiesDialog *dialog, GladeXML *gui) { @@ -194,7 +217,7 @@ G_CALLBACK (panel_properties_dialog_orientation_changed), dialog); - if (! panel_profile_is_writable_toplevel_orientation (dialog->toplevel)) { + if (! panel_profile_is_writable_toplevel_orientation (dialog->toplevel) || panel_profile_get_toplevel_disable_movement (dialog->toplevel)) { gtk_widget_set_sensitive (dialog->orientation_combo, FALSE); gtk_widget_set_sensitive (dialog->orientation_label, FALSE); gtk_widget_show (dialog->writability_warn_general); @@ -988,6 +1011,13 @@ panel_properties_dialog_setup_hidebuttons_toggle (dialog, gui); panel_properties_dialog_setup_arrows_toggle (dialog, gui); + dialog->disable_movement_notify = + panel_profile_toplevel_notify_add ( + dialog->toplevel, + "disable_movement", + (GConfClientNotifyFunc) panel_properties_dialog_disable_movement_notify, + dialog); + panel_properties_update_arrows_toggle_visible ( dialog, GTK_TOGGLE_BUTTON (dialog->hidebuttons_toggle)); g_signal_connect_swapped (dialog->hidebuttons_toggle, "toggled", diff -ruN gnome-panel-2.22.2/gnome-panel/panel-toplevel.c gnome-panel-2.22.2-patched/gnome-panel/panel-toplevel.c --- gnome-panel-2.22.2/gnome-panel/panel-toplevel.c 2008-05-26 18:10:44.000000000 +0200 +++ gnome-panel-2.22.2-patched/gnome-panel/panel-toplevel.c 2008-07-22 22:29:06.000000000 +0200 @@ -438,7 +438,8 @@ toplevel->priv->grab_op != PANEL_GRAB_OP_NONE) return; - if (panel_lockdown_get_locked_down ()) + if (panel_lockdown_get_locked_down ()|| + panel_profile_get_toplevel_disable_movement (toplevel)) return; /* If any of the position/orientation are not writable, diff -ruN gnome-panel-2.22.2/gnome-panel/panel-toplevel.schemas.in gnome-panel-2.22.2-patched/gnome-panel/panel-toplevel.schemas.in --- gnome-panel-2.22.2/gnome-panel/panel-toplevel.schemas.in 2008-05-26 18:10:44.000000000 +0200 +++ gnome-panel-2.22.2-patched/gnome-panel/panel-toplevel.schemas.in 2008-07-22 22:29:06.000000000 +0200 @@ -47,6 +47,19 @@ + + + /schemas/apps/panel/toplevels/disable_movement + panel + bool + false + + Lock the panel position + Disable support for moving a panel with a mouse drag. It has + been know to cause problems for users that accidentally move or resize + their panels. + + /schemas/apps/panel/toplevels/expand