File gnome-panel-disable-movement.patch of Package gnome-panel

Index: gnome-panel-2.24.1/gnome-panel/panel-context-menu.c
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-context-menu.c
+++ gnome-panel-2.24.1/gnome-panel/panel-context-menu.c
@@ -161,6 +161,31 @@ panel_context_menu_create_new_panel (Gtk
 }
 
 static void
+panel_context_menu_enable_disable_move (GtkWidget *menuitem,
+					PanelToplevel *toplevel,
+					gboolean   read_only)
+{
+	gboolean disable_movement;
+
+	disable_movement = panel_profile_get_toplevel_disable_movement (toplevel);
+	if (!read_only) {
+		disable_movement = !disable_movement;
+		panel_profile_set_toplevel_disable_movement (toplevel,
+							     disable_movement);
+	}
+
+	gtk_label_set_label (GTK_LABEL (GTK_BIN (menuitem)->child),
+			     disable_movement ? _("A_llow Panel to be Moved") : _("_Lock Panel Position"));
+}
+
+static void
+panel_context_menu_enable_disable_move_cb (GtkWidget *menuitem,
+					   PanelToplevel *toplevel)
+{
+	panel_context_menu_enable_disable_move (menuitem, toplevel, FALSE);
+}
+
+static void
 panel_context_menu_delete_panel (PanelToplevel *toplevel)
 {
 	if (panel_toplevel_is_last_unattached (toplevel)) {
@@ -198,6 +223,7 @@ static void
 panel_context_menu_build_edition (PanelWidget *panel_widget,
 				  GtkWidget   *menu)
 {
+	gboolean   disable_movement;
 	GtkWidget *menuitem;
 	GtkWidget *image;
 
@@ -237,6 +263,19 @@ panel_context_menu_build_edition (PanelW
 
 	add_menu_separator (menu);
 
+	/* not translatable since it will change */
+	menuitem = gtk_image_menu_item_new_with_mnemonic ("Allow Panel to be Moved");
+	image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION,
+					  GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
+	gtk_widget_show (menuitem);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+	g_signal_connect (menuitem, "activate",
+			  G_CALLBACK (panel_context_menu_enable_disable_move),
+			  panel_widget->toplevel);
+	panel_context_menu_enable_disable_move (menuitem,
+						panel_widget->toplevel, TRUE);
+
 	menuitem = gtk_image_menu_item_new_with_mnemonic (_("_New Panel"));
 	image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
Index: gnome-panel-2.24.1/gnome-panel/panel-default-setup.entries
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-default-setup.entries
+++ gnome-panel-2.24.1/gnome-panel/panel-default-setup.entries
@@ -81,6 +81,13 @@
       </value>
     </entry>
     <entry>
+      <key>toplevels/top_panel/disable_movement</key>
+      <schema_key>/schemas/apps/panel/toplevels/disable_movement</schema_key>
+      <value>
+        <bool>false</bool>
+      </value>
+    </entry>
+    <entry>
       <key>toplevels/top_panel/orientation</key>
       <schema_key>/schemas/apps/panel/toplevels/orientation</schema_key>
       <value>
@@ -129,6 +136,13 @@
       </value>
     </entry>
     <entry>
+      <key>toplevels/bottom_panel/disable_movement</key>
+      <schema_key>/schemas/apps/panel/toplevels/disable_movement</schema_key>
+      <value>
+        <bool>false</bool>
+      </value>
+    </entry>
+    <entry>
       <key>toplevels/bottom_panel/orientation</key>
       <schema_key>/schemas/apps/panel/toplevels/orientation</schema_key>
       <value>
Index: gnome-panel-2.24.1/gnome-panel/panel-global.schemas.in
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-global.schemas.in
+++ gnome-panel-2.24.1/gnome-panel/panel-global.schemas.in
@@ -33,6 +33,18 @@ Panel Global Config Schema File -  work
       </schema>
 
       <schema>
+        <key>/schemas/apps/panel/global/disable_movement</key>
+        <applyto>/apps/panel/global/disable_movement</applyto>
+        <owner>panel</owner>
+        <type>bool</type>
+        <default>false</default>
+        <locale name="C">
+          <short>Lock Panel Position</short>
+          <long>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.</long>
+        </locale>
+	</schema>
+      <schema>
         <key>/schemas/apps/panel/global/enable_animations</key>
         <applyto>/apps/panel/global/enable_animations</applyto>
         <owner>panel</owner>
Index: gnome-panel-2.24.1/gnome-panel/panel-profile.c
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-profile.c
+++ gnome-panel-2.24.1/gnome-panel/panel-profile.c
@@ -551,6 +551,19 @@ panel_profile_set_toplevel_name (PanelTo
 		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 @@ panel_profile_get_toplevel_name (PanelTo
 
 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)
Index: gnome-panel-2.24.1/gnome-panel/panel-profile.h
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-profile.h
+++ gnome-panel-2.24.1/gnome-panel/panel-profile.h
@@ -83,6 +83,9 @@ PanelOrientation
             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);
Index: gnome-panel-2.24.1/gnome-panel/panel-properties-dialog.c
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-properties-dialog.c
+++ gnome-panel-2.24.1/gnome-panel/panel-properties-dialog.c
@@ -77,6 +77,7 @@ typedef struct {
 
 	guint          toplevel_notify;
 	guint          background_notify;
+	guint          disable_movement_notify;
 
 	/* The theme directory of the icon, see bug #119209 */
 	char          *icon_theme_dir;
@@ -102,6 +103,10 @@ panel_properties_dialog_free (PanelPrope
 		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;
@@ -153,6 +158,24 @@ panel_properties_dialog_orientation_chan
 }
 
 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)
 {
@@ -197,7 +220,7 @@ panel_properties_dialog_setup_orientatio
 				  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);
@@ -992,6 +1015,13 @@ panel_properties_dialog_new (PanelToplev
 	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",
Index: gnome-panel-2.24.1/gnome-panel/panel-toplevel.c
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-toplevel.c
+++ gnome-panel-2.24.1/gnome-panel/panel-toplevel.c
@@ -438,7 +438,8 @@ panel_toplevel_begin_grab_op (PanelTople
 	    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,
Index: gnome-panel-2.24.1/gnome-panel/panel-toplevel.schemas.in
===================================================================
--- gnome-panel-2.24.1.orig/gnome-panel/panel-toplevel.schemas.in
+++ gnome-panel-2.24.1/gnome-panel/panel-toplevel.schemas.in
@@ -47,6 +47,19 @@
         </long>
       </locale>
     </schema>
+
+    <schema> 
+      <key>/schemas/apps/panel/toplevels/disable_movement</key>
+      <owner>panel</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Lock the panel position</short>
+	<long>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.</long>
+      </locale>
+    </schema>
  
     <schema>
       <key>/schemas/apps/panel/toplevels/expand</key>
openSUSE Build Service is sponsored by