From 451eef9b275ce006b270a3569d96e531e24dd15a Mon Sep 17 00:00:00 2001 From: Alexander van der Meij Date: Fri, 29 Aug 2014 20:52:13 +0200 Subject: implementation of extension interface and status management (gsoc2014) --- src/caja-file-management-properties.c | 93 +++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) (limited to 'src/caja-file-management-properties.c') diff --git a/src/caja-file-management-properties.c b/src/caja-file-management-properties.c index d5f62b68..a0902ed2 100644 --- a/src/caja-file-management-properties.c +++ b/src/caja-file-management-properties.c @@ -37,6 +37,7 @@ #include #include +#include #include #include @@ -174,6 +175,14 @@ static const char * const icon_captions_components[] = NULL }; +enum +{ + EXT_STATE_COLUMN, + EXT_ICON_COLUMN, + EXT_INFO_COLUMN, + EXT_STRUCT_COLUMN +}; + static void caja_file_management_properties_dialog_update_media_sensitivity (GtkBuilder *builder); static void @@ -604,6 +613,38 @@ out: g_free (x_content_type); } +static void +extension_state_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data) +{ + GtkTreeIter iter; + GtkTreePath *path; + GtkTreeModel *model; + gboolean new_state; + Extension *ext; + + path = gtk_tree_path_new_from_string (path_str); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (data)); + + g_object_get (G_OBJECT (cell), "active", &new_state, NULL); + gtk_tree_model_get_iter_from_string (model, &iter, path_str); + + + + new_state ^= 1; + + if (&iter != NULL) + { + gtk_tree_model_get (model, &iter, EXT_STRUCT_COLUMN, &ext, -1); + + if (caja_extension_set_state (ext, new_state)) + { + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + EXT_STATE_COLUMN, new_state, -1); + } + } + gtk_tree_path_free (path); +} + static void caja_file_management_properties_dialog_setup_media_page (GtkBuilder *builder) @@ -715,6 +756,57 @@ skip: caja_file_management_properties_dialog_update_media_sensitivity (builder); } +static void +caja_file_management_properties_dialog_setup_extension_page (GtkBuilder *builder) +{ + GtkCellRendererToggle *toggle; + GtkListStore *store; + GtkTreeView *view; + GtkTreeIter iter; + GtkIconTheme *icon_theme; + GdkPixbuf *ext_pixbuf_icon; + gchar *ext_text_info; + + GList *extensions; + int i; + + extensions = caja_extensions_get_list (); + + view = GTK_TREE_VIEW ( + gtk_builder_get_object (builder, "extension_view")); + store = GTK_LIST_STORE ( + gtk_builder_get_object (builder, "extension_store")); + + toggle = GTK_CELL_RENDERER_TOGGLE ( + gtk_builder_get_object (builder, "extension_toggle")); + g_object_set (toggle, "xpad", 6, NULL); + + g_signal_connect (toggle, "toggled", + G_CALLBACK (extension_state_toggled), view); + + icon_theme = gtk_icon_theme_get_default(); + ext_pixbuf_icon = gtk_icon_theme_load_icon (icon_theme, "gtk-open", + GTK_ICON_SIZE_SMALL_TOOLBAR, + GTK_ICON_LOOKUP_USE_BUILTIN, NULL); + + for (i = 0; i < g_list_length (extensions); i++) + { + Extension* ext = EXTENSION (g_list_nth_data (extensions, i)); + + ext_text_info = g_markup_printf_escaped ("%s\n%s", + ext->filename, + "This is a placeholder."); + + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, + EXT_STATE_COLUMN, ext->state, + EXT_ICON_COLUMN, ext_pixbuf_icon, + EXT_INFO_COLUMN, ext_text_info, + EXT_STRUCT_COLUMN, ext, -1); + } + g_free (ext_text_info); +} + static void bind_builder_bool (GtkBuilder *builder, GSettings *settings, @@ -1010,6 +1102,7 @@ caja_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow *wi caja_file_management_properties_dialog_setup_icon_caption_page (builder); caja_file_management_properties_dialog_setup_list_column_page (builder); caja_file_management_properties_dialog_setup_media_page (builder); + caja_file_management_properties_dialog_setup_extension_page (builder); g_signal_connect_swapped (caja_media_preferences, "changed::" CAJA_PREFERENCES_MEDIA_AUTORUN_NEVER, -- cgit v1.2.1