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 - + + + /schemas/apps/nautilus/lockdown/disable_context_menus + /apps/nautilus/lockdown/disable_context_menus + nautilus + bool + false + + Disable context menus in file views + + Set this to true if you are deploying a kiosk and don't want users + to access the context menu in file views. + + + + 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);