diff options
Diffstat (limited to 'src/caja-file-management-properties.c')
-rw-r--r-- | src/caja-file-management-properties.c | 63 |
1 files changed, 60 insertions, 3 deletions
diff --git a/src/caja-file-management-properties.c b/src/caja-file-management-properties.c index 0568f360..29039add 100644 --- a/src/caja-file-management-properties.c +++ b/src/caja-file-management-properties.c @@ -43,6 +43,8 @@ #include <libcaja-private/caja-autorun.h> +#include <libcaja-extension/caja-configurable.h> + /* string enum preferences */ #define CAJA_FILE_MANAGEMENT_PROPERTIES_DEFAULT_VIEW_WIDGET "default_view_combobox" #define CAJA_FILE_MANAGEMENT_PROPERTIES_ICON_VIEW_ZOOM_WIDGET "icon_view_zoom_combobox" @@ -622,6 +624,7 @@ out: } static gulong extension_about_id = 0; +static gulong extension_configure_id = 0; static void extension_about_clicked (GtkButton *button, Extension *ext) @@ -642,8 +645,29 @@ extension_about_clicked (GtkButton *button, Extension *ext) gtk_widget_destroy (GTK_WIDGET (extension_about_dialog)); } +static int extension_configure_check (Extension *ext) +{ + if (!ext->state) // For now, only allow configuring enabled extensions. + { + return 0; + } + if (!CAJA_IS_CONFIGURABLE(ext->module)) + { + return 0; + } + return 1; +} + static void -extension_list_selection_changed (GtkTreeSelection *selection, GtkButton *about_button) +extension_configure_clicked (GtkButton *button, Extension *ext) +{ + if (extension_configure_check(ext)) { + caja_configurable_run_config(CAJA_CONFIGURABLE(ext->module)); + } +} + +static void +extension_list_selection_changed_about (GtkTreeSelection *selection, GtkButton *about_button) { GtkTreeModel *model; GtkTreeIter iter; @@ -668,6 +692,34 @@ extension_list_selection_changed (GtkTreeSelection *selection, GtkButton *about_ } static void +extension_list_selection_changed_configure (GtkTreeSelection *selection, GtkButton *configure_button) +{ + GtkTreeModel *model; + GtkTreeIter iter; + Extension *ext; + + gtk_widget_set_sensitive (GTK_WIDGET (configure_button), FALSE); + + if (extension_configure_id > 0) + { + g_signal_handler_disconnect (configure_button, extension_configure_id); + extension_configure_id = 0; + } + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return; + + gtk_tree_model_get (model, &iter, EXT_STRUCT_COLUMN, &ext, -1); + if (ext != NULL) { + // Unconfigurable extensions remain unconfigurable. + if (extension_configure_check(ext)) { + gtk_widget_set_sensitive (GTK_WIDGET (configure_button), TRUE); + extension_configure_id = g_signal_connect (configure_button, "clicked", G_CALLBACK (extension_configure_clicked), ext); + } + } +} + +static void extension_state_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { GtkTreeIter iter; @@ -819,7 +871,7 @@ caja_file_management_properties_dialog_setup_extension_page (GtkBuilder *builder GtkTreeIter iter; GtkIconTheme *icon_theme; GdkPixbuf *ext_pixbuf_icon; - GtkButton *about_button; + GtkButton *about_button, *configure_button; gchar *ext_text_info; GList *extensions; @@ -883,11 +935,16 @@ caja_file_management_properties_dialog_setup_extension_page (GtkBuilder *builder } about_button = GTK_BUTTON (gtk_builder_get_object (builder, "about_extension_button")); + configure_button = GTK_BUTTON (gtk_builder_get_object (builder, "configure_extension_button")); + selection = gtk_tree_view_get_selection (view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (selection, "changed", - G_CALLBACK (extension_list_selection_changed), + G_CALLBACK (extension_list_selection_changed_about), about_button); + g_signal_connect (selection, "changed", + G_CALLBACK (extension_list_selection_changed_configure), + configure_button); } static void |