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>