nautilus/nautilus-bnc363122-lockdown-context-menus.diff

119 lines
4.7 KiB
Diff
Raw Normal View History

https://bugzilla.novell.com/show_bug.cgi?id=363122
Add a way to disable context menus in Nautilus's file views, for
quick-and-dirty kiosks.
This adds an /apps/nautilus/lockdown/disable_context_menus GConf key;
if set to true, it will disable all the contextual menus on file views.
diff --git a/libnautilus-private/apps_nautilus_preferences.schemas.in b/libnautilus-private/apps_nautilus_preferences.schemas.in
index 8548bf0..82531dc 100644
--- a/libnautilus-private/apps_nautilus_preferences.schemas.in
+++ b/libnautilus-private/apps_nautilus_preferences.schemas.in
@@ -989,6 +989,21 @@ most cases, this should be left alone. -->Sans 10</default>
</long>
</locale>
</schema>
-
+
+ <schema>
+ <key>/schemas/apps/nautilus/lockdown/disable_context_menus</key>
+ <applyto>/apps/nautilus/lockdown/disable_context_menus</applyto>
+ <owner>nautilus</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Disable context menus in file views</short>
+ <long>
+ Set this to true if you are deploying a kiosk and don't want users
+ to access the context menu in file views.
+ </long>
+ </locale>
+ </schema>
+
</schemalist>
</gconfschemafile>
diff --git a/libnautilus-private/nautilus-debug-log.h b/libnautilus-private/nautilus-debug-log.h
index 801610d..ad0152e 100644
--- a/libnautilus-private/nautilus-debug-log.h
+++ b/libnautilus-private/nautilus-debug-log.h
@@ -30,6 +30,7 @@
#define NAUTILUS_DEBUG_LOG_DOMAIN_USER "USER" /* always enabled */
#define NAUTILUS_DEBUG_LOG_DOMAIN_ASYNC "async" /* when asynchronous notifications come in */
#define NAUTILUS_DEBUG_LOG_DOMAIN_GLOG "GLog" /* used for GLog messages; don't use it yourself */
+#define NAUTILUS_DEBUG_LOG_DOMAIN_LOCKDOWN "lockdown" /* when things get *not* done due to lockdown */
void nautilus_debug_log (gboolean is_milestone, const char *domain, const char *format, ...);
diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c
index 5f4f498..279810f 100644
--- a/libnautilus-private/nautilus-global-preferences.c
+++ b/libnautilus-private/nautilus-global-preferences.c
@@ -227,6 +227,10 @@ typedef struct
* YOU SHOULD EDIT THE SCHEMAS FILE TO CHANGE DEFAULTS.
*/
static const PreferenceDefault preference_defaults[] = {
+ { NAUTILUS_LOCKDOWN_DISABLE_CONTEXT_MENUS,
+ PREFERENCE_BOOLEAN,
+ GINT_TO_POINTER (FALSE)
+ },
{ NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES,
PREFERENCE_BOOLEAN,
GINT_TO_POINTER (FALSE)
diff --git a/libnautilus-private/nautilus-global-preferences.h b/libnautilus-private/nautilus-global-preferences.h
index e6d0301..96dc6e2 100644
--- a/libnautilus-private/nautilus-global-preferences.h
+++ b/libnautilus-private/nautilus-global-preferences.h
@@ -30,6 +30,8 @@
G_BEGIN_DECLS
+#define NAUTILUS_LOCKDOWN_DISABLE_CONTEXT_MENUS "lockdown/disable_context_menus"
+
/* Which theme is active */
#define NAUTILUS_PREFERENCES_THEME "/desktop/gnome/file_views/icon_theme"
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index f23434c..2a505a7 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -7288,6 +7288,12 @@ fm_directory_view_pop_up_selection_context_menu (FMDirectoryView *view,
{
g_assert (FM_IS_DIRECTORY_VIEW (view));
+ if (eel_preferences_get_boolean (NAUTILUS_LOCKDOWN_DISABLE_CONTEXT_MENUS)) {
+ nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_LOCKDOWN,
+ "Ignoring request to pop up the context menu for the view's selection");
+ return;
+ }
+
/* Make the context menu items not flash as they update to proper disabled,
* etc. states by forcing menus to update now.
*/
@@ -7317,6 +7323,12 @@ fm_directory_view_pop_up_background_context_menu (FMDirectoryView *view,
{
g_assert (FM_IS_DIRECTORY_VIEW (view));
+ if (eel_preferences_get_boolean (NAUTILUS_LOCKDOWN_DISABLE_CONTEXT_MENUS)) {
+ nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_LOCKDOWN,
+ "Ignoring request to pop up the context menu for the view's background");
+ return;
+ }
+
/* Make the context menu items not flash as they update to proper disabled,
* etc. states by forcing menus to update now.
*/
@@ -7345,6 +7357,12 @@ fm_directory_view_pop_up_location_context_menu (FMDirectoryView *view,
{
g_assert (FM_IS_DIRECTORY_VIEW (view));
+ if (eel_preferences_get_boolean (NAUTILUS_LOCKDOWN_DISABLE_CONTEXT_MENUS)) {
+ nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_LOCKDOWN,
+ "Ignoring request to pop up the context menu for the view");
+ return;
+ }
+
/* always update the menu before showing it. Shouldn't be too expensive. */
real_update_location_menu (view);