summaryrefslogtreecommitdiff
path: root/plugins/filebrowser/gedit-file-browser-plugin.c
diff options
context:
space:
mode:
authorPerberos <[email protected]>2011-11-07 19:52:18 -0300
committerPerberos <[email protected]>2011-11-07 19:52:18 -0300
commit5ded9cba8563f336939400303d6a841d5089b107 (patch)
treec5676588cff26ba37e12369fe4de24b54e9f6682 /plugins/filebrowser/gedit-file-browser-plugin.c
parentf00b3a11a199f9f85a4d46a600f9d14179b37dbf (diff)
downloadpluma-5ded9cba8563f336939400303d6a841d5089b107.tar.bz2
pluma-5ded9cba8563f336939400303d6a841d5089b107.tar.xz
renaming from gedit to pluma
Diffstat (limited to 'plugins/filebrowser/gedit-file-browser-plugin.c')
-rwxr-xr-xplugins/filebrowser/gedit-file-browser-plugin.c1254
1 files changed, 0 insertions, 1254 deletions
diff --git a/plugins/filebrowser/gedit-file-browser-plugin.c b/plugins/filebrowser/gedit-file-browser-plugin.c
deleted file mode 100755
index f2da19f5..00000000
--- a/plugins/filebrowser/gedit-file-browser-plugin.c
+++ /dev/null
@@ -1,1254 +0,0 @@
-/*
- * gedit-file-browser-plugin.c - Gedit plugin providing easy file access
- * from the sidepanel
- *
- * Copyright (C) 2006 - Jesse van den Kieboom <[email protected]>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gedit/gedit-commands.h>
-#include <gedit/gedit-utils.h>
-#include <gedit/gedit-app.h>
-#include <glib/gi18n-lib.h>
-#include <gedit/gedit-debug.h>
-#include <mateconf/mateconf-client.h>
-#include <string.h>
-
-#include "gedit-file-browser-enum-types.h"
-#include "gedit-file-browser-plugin.h"
-#include "gedit-file-browser-utils.h"
-#include "gedit-file-browser-error.h"
-#include "gedit-file-browser-widget.h"
-#include "gedit-file-browser-messages.h"
-
-#define WINDOW_DATA_KEY "GeditFileBrowserPluginWindowData"
-#define FILE_BROWSER_BASE_KEY "/apps/gedit-2/plugins/filebrowser"
-#define CAJA_CLICK_POLICY_BASE_KEY "/apps/caja/preferences"
-#define CAJA_CLICK_POLICY_KEY "click_policy"
-#define CAJA_ENABLE_DELETE_KEY "enable_delete"
-#define CAJA_CONFIRM_TRASH_KEY "confirm_trash"
-#define TERMINAL_EXEC_KEY "/desktop/mate/applications/terminal/exec"
-
-#define GEDIT_FILE_BROWSER_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_FILE_BROWSER_PLUGIN, GeditFileBrowserPluginPrivate))
-
-struct _GeditFileBrowserPluginPrivate
-{
- gpointer dummy;
-};
-
-typedef struct _GeditFileBrowserPluginData
-{
- GeditFileBrowserWidget * tree_widget;
- gulong merge_id;
- GtkActionGroup * action_group;
- GtkActionGroup * single_selection_action_group;
- gboolean auto_root;
- gulong end_loading_handle;
- gboolean confirm_trash;
-
- guint click_policy_handle;
- guint enable_delete_handle;
- guint confirm_trash_handle;
-} GeditFileBrowserPluginData;
-
-static void on_uri_activated_cb (GeditFileBrowserWidget * widget,
- gchar const *uri,
- GeditWindow * window);
-static void on_error_cb (GeditFileBrowserWidget * widget,
- guint code,
- gchar const *message,
- GeditWindow * window);
-static void on_model_set_cb (GeditFileBrowserView * widget,
- GParamSpec *arg1,
- GeditWindow * window);
-static void on_virtual_root_changed_cb (GeditFileBrowserStore * model,
- GParamSpec * param,
- GeditWindow * window);
-static void on_filter_mode_changed_cb (GeditFileBrowserStore * model,
- GParamSpec * param,
- GeditWindow * window);
-static void on_rename_cb (GeditFileBrowserStore * model,
- const gchar * olduri,
- const gchar * newuri,
- GeditWindow * window);
-static void on_filter_pattern_changed_cb (GeditFileBrowserWidget * widget,
- GParamSpec * param,
- GeditWindow * window);
-static void on_tab_added_cb (GeditWindow * window,
- GeditTab * tab,
- GeditFileBrowserPluginData * data);
-static gboolean on_confirm_delete_cb (GeditFileBrowserWidget * widget,
- GeditFileBrowserStore * store,
- GList * rows,
- GeditWindow * window);
-static gboolean on_confirm_no_trash_cb (GeditFileBrowserWidget * widget,
- GList * files,
- GeditWindow * window);
-
-GEDIT_PLUGIN_REGISTER_TYPE_WITH_CODE (GeditFileBrowserPlugin, filetree_plugin, \
- gedit_file_browser_enum_and_flag_register_type (type_module); \
- gedit_file_browser_store_register_type (type_module); \
- gedit_file_bookmarks_store_register_type (type_module); \
- gedit_file_browser_view_register_type (type_module); \
- gedit_file_browser_widget_register_type (type_module); \
-)
-
-
-static void
-filetree_plugin_init (GeditFileBrowserPlugin * plugin)
-{
- plugin->priv = GEDIT_FILE_BROWSER_PLUGIN_GET_PRIVATE (plugin);
-}
-
-static void
-filetree_plugin_finalize (GObject * object)
-{
- //GeditFileBrowserPlugin * plugin = GEDIT_FILE_BROWSER_PLUGIN (object);
-
- G_OBJECT_CLASS (filetree_plugin_parent_class)->finalize (object);
-}
-
-static GeditFileBrowserPluginData *
-get_plugin_data (GeditWindow * window)
-{
- return (GeditFileBrowserPluginData *) (g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY));
-}
-
-static void
-on_end_loading_cb (GeditFileBrowserStore * store,
- GtkTreeIter * iter,
- GeditFileBrowserPluginData * data)
-{
- /* Disconnect the signal */
- g_signal_handler_disconnect (store, data->end_loading_handle);
- data->end_loading_handle = 0;
- data->auto_root = FALSE;
-}
-
-static void
-prepare_auto_root (GeditFileBrowserPluginData *data)
-{
- GeditFileBrowserStore *store;
-
- data->auto_root = TRUE;
-
- store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
-
- if (data->end_loading_handle != 0) {
- g_signal_handler_disconnect (store, data->end_loading_handle);
- data->end_loading_handle = 0;
- }
-
- data->end_loading_handle = g_signal_connect (store,
- "end-loading",
- G_CALLBACK (on_end_loading_cb),
- data);
-}
-
-static void
-restore_default_location (GeditFileBrowserPluginData *data)
-{
- gchar * root;
- gchar * virtual_root;
- gboolean bookmarks;
- gboolean remote;
- MateConfClient * client;
-
- client = mateconf_client_get_default ();
- if (!client)
- return;
-
- bookmarks = !mateconf_client_get_bool (client,
- FILE_BROWSER_BASE_KEY "/on_load/tree_view",
- NULL);
-
- if (bookmarks) {
- g_object_unref (client);
- gedit_file_browser_widget_show_bookmarks (data->tree_widget);
- return;
- }
-
- root = mateconf_client_get_string (client,
- FILE_BROWSER_BASE_KEY "/on_load/root",
- NULL);
- virtual_root = mateconf_client_get_string (client,
- FILE_BROWSER_BASE_KEY "/on_load/virtual_root",
- NULL);
-
- remote = mateconf_client_get_bool (client,
- FILE_BROWSER_BASE_KEY "/on_load/enable_remote",
- NULL);
-
- if (root != NULL && *root != '\0') {
- GFile *file;
-
- file = g_file_new_for_uri (root);
-
- if (remote || g_file_is_native (file)) {
- if (virtual_root != NULL && *virtual_root != '\0') {
- prepare_auto_root (data);
- gedit_file_browser_widget_set_root_and_virtual_root (data->tree_widget,
- root,
- virtual_root);
- } else {
- prepare_auto_root (data);
- gedit_file_browser_widget_set_root (data->tree_widget,
- root,
- TRUE);
- }
- }
-
- g_object_unref (file);
- }
-
- g_object_unref (client);
- g_free (root);
- g_free (virtual_root);
-}
-
-static void
-restore_filter (GeditFileBrowserPluginData * data)
-{
- MateConfClient * client;
- gchar *filter_mode;
- GeditFileBrowserStoreFilterMode mode;
- gchar *pattern;
-
- client = mateconf_client_get_default ();
- if (!client)
- return;
-
- /* Get filter_mode */
- filter_mode = mateconf_client_get_string (client,
- FILE_BROWSER_BASE_KEY "/filter_mode",
- NULL);
-
- /* Filter mode */
- mode = gedit_file_browser_store_filter_mode_get_default ();
-
- if (filter_mode != NULL) {
- if (strcmp (filter_mode, "hidden") == 0) {
- mode = GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN;
- } else if (strcmp (filter_mode, "binary") == 0) {
- mode = GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY;
- } else if (strcmp (filter_mode, "hidden_and_binary") == 0 ||
- strcmp (filter_mode, "binary_and_hidden") == 0) {
- mode = GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN |
- GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY;
- } else if (strcmp (filter_mode, "none") == 0 ||
- *filter_mode == '\0') {
- mode = GEDIT_FILE_BROWSER_STORE_FILTER_MODE_NONE;
- }
- }
-
- /* Set the filter mode */
- gedit_file_browser_store_set_filter_mode (
- gedit_file_browser_widget_get_browser_store (data->tree_widget),
- mode);
-
- pattern = mateconf_client_get_string (client,
- FILE_BROWSER_BASE_KEY "/filter_pattern",
- NULL);
-
- gedit_file_browser_widget_set_filter_pattern (data->tree_widget,
- pattern);
-
- g_object_unref (client);
- g_free (filter_mode);
- g_free (pattern);
-}
-
-static GeditFileBrowserViewClickPolicy
-click_policy_from_string (gchar const *click_policy)
-{
- if (click_policy && strcmp (click_policy, "single") == 0)
- return GEDIT_FILE_BROWSER_VIEW_CLICK_POLICY_SINGLE;
- else
- return GEDIT_FILE_BROWSER_VIEW_CLICK_POLICY_DOUBLE;
-}
-
-static void
-on_click_policy_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- MateConfValue *value;
- GeditFileBrowserPluginData * data;
- gchar const *click_policy;
- GeditFileBrowserViewClickPolicy policy = GEDIT_FILE_BROWSER_VIEW_CLICK_POLICY_DOUBLE;
- GeditFileBrowserView *view;
-
- data = (GeditFileBrowserPluginData *)(user_data);
- value = mateconf_entry_get_value (entry);
-
- if (value && value->type == MATECONF_VALUE_STRING) {
- click_policy = mateconf_value_get_string (value);
-
- policy = click_policy_from_string (click_policy);
- }
-
- view = gedit_file_browser_widget_get_browser_view (data->tree_widget);
- gedit_file_browser_view_set_click_policy (view, policy);
-}
-
-static void
-on_enable_delete_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- MateConfValue *value;
- GeditFileBrowserPluginData *data;
- gboolean enable = FALSE;
-
- data = (GeditFileBrowserPluginData *)(user_data);
- value = mateconf_entry_get_value (entry);
-
- if (value && value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (value);
-
- g_object_set (G_OBJECT (data->tree_widget), "enable-delete", enable, NULL);
-}
-
-static void
-on_confirm_trash_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- MateConfValue *value;
- GeditFileBrowserPluginData *data;
- gboolean enable = FALSE;
-
- data = (GeditFileBrowserPluginData *)(user_data);
- value = mateconf_entry_get_value (entry);
-
- if (value && value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (value);
-
- data->confirm_trash = enable;
-}
-
-static void
-install_caja_prefs (GeditFileBrowserPluginData *data)
-{
- MateConfClient *client;
- gchar *pref;
- gboolean prefb;
- GeditFileBrowserViewClickPolicy policy;
- GeditFileBrowserView *view;
-
- client = mateconf_client_get_default ();
- if (!client)
- return;
-
- mateconf_client_add_dir (client,
- CAJA_CLICK_POLICY_BASE_KEY,
- MATECONF_CLIENT_PRELOAD_NONE,
- NULL);
-
- /* Get click_policy */
- pref = mateconf_client_get_string (client,
- CAJA_CLICK_POLICY_BASE_KEY "/" CAJA_CLICK_POLICY_KEY,
- NULL);
-
- policy = click_policy_from_string (pref);
-
- view = gedit_file_browser_widget_get_browser_view (data->tree_widget);
- gedit_file_browser_view_set_click_policy (view, policy);
-
- if (pref) {
- data->click_policy_handle =
- mateconf_client_notify_add (client,
- CAJA_CLICK_POLICY_BASE_KEY "/" CAJA_CLICK_POLICY_KEY,
- on_click_policy_changed,
- data,
- NULL,
- NULL);
- g_free (pref);
- }
-
- /* Get enable_delete */
- prefb = mateconf_client_get_bool (client,
- CAJA_CLICK_POLICY_BASE_KEY "/" CAJA_ENABLE_DELETE_KEY,
- NULL);
-
- g_object_set (G_OBJECT (data->tree_widget), "enable-delete", prefb, NULL);
-
- data->enable_delete_handle =
- mateconf_client_notify_add (client,
- CAJA_CLICK_POLICY_BASE_KEY "/" CAJA_ENABLE_DELETE_KEY,
- on_enable_delete_changed,
- data,
- NULL,
- NULL);
-
- /* Get confirm_trash */
- prefb = mateconf_client_get_bool (client,
- CAJA_CLICK_POLICY_BASE_KEY "/" CAJA_CONFIRM_TRASH_KEY,
- NULL);
-
- data->confirm_trash = prefb;
-
- data->confirm_trash_handle =
- mateconf_client_notify_add (client,
- CAJA_CLICK_POLICY_BASE_KEY "/" CAJA_CONFIRM_TRASH_KEY,
- on_confirm_trash_changed,
- data,
- NULL,
- NULL);
- g_object_unref (client);
-}
-
-static void
-set_root_from_doc (GeditFileBrowserPluginData * data,
- GeditDocument * doc)
-{
- GFile *file;
- GFile *parent;
-
- if (doc == NULL)
- return;
-
- file = gedit_document_get_location (doc);
- if (file == NULL)
- return;
-
- parent = g_file_get_parent (file);
-
- if (parent != NULL) {
- gchar * root;
-
- root = g_file_get_uri (parent);
-
- gedit_file_browser_widget_set_root (data->tree_widget,
- root,
- TRUE);
-
- g_object_unref (parent);
- g_free (root);
- }
-
- g_object_unref (file);
-}
-
-static void
-on_action_set_active_root (GtkAction * action,
- GeditWindow * window)
-{
- GeditFileBrowserPluginData *data;
-
- data = get_plugin_data (window);
- set_root_from_doc (data,
- gedit_window_get_active_document (window));
-}
-
-static gchar *
-get_terminal (void)
-{
- MateConfClient * client;
- gchar * terminal;
-
- client = mateconf_client_get_default ();
- terminal = mateconf_client_get_string (client,
- TERMINAL_EXEC_KEY,
- NULL);
- g_object_unref (client);
-
- if (terminal == NULL) {
- const gchar *term = g_getenv ("TERM");
-
- if (term != NULL)
- terminal = g_strdup (term);
- else
- terminal = g_strdup ("xterm");
- }
-
- return terminal;
-}
-
-static void
-on_action_open_terminal (GtkAction * action,
- GeditWindow * window)
-{
- GeditFileBrowserPluginData * data;
- gchar * terminal;
- gchar * wd = NULL;
- gchar * local;
- gchar * argv[2];
- GFile * file;
-
- GtkTreeIter iter;
- GeditFileBrowserStore * store;
-
- data = get_plugin_data (window);
-
- /* Get the current directory */
- if (!gedit_file_browser_widget_get_selected_directory (data->tree_widget, &iter))
- return;
-
- store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
- gtk_tree_model_get (GTK_TREE_MODEL (store),
- &iter,
- GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
- &wd,
- -1);
-
- if (wd == NULL)
- return;
-
- terminal = get_terminal ();
-
- file = g_file_new_for_uri (wd);
- local = g_file_get_path (file);
- g_object_unref (file);
-
- argv[0] = terminal;
- argv[1] = NULL;
-
- g_spawn_async (local,
- argv,
- NULL,
- G_SPAWN_SEARCH_PATH,
- NULL,
- NULL,
- NULL,
- NULL);
-
- g_free (terminal);
- g_free (wd);
- g_free (local);
-}
-
-static void
-on_selection_changed_cb (GtkTreeSelection *selection,
- GeditWindow *window)
-{
- GeditFileBrowserPluginData * data;
- GtkTreeView * tree_view;
- GtkTreeModel * model;
- GtkTreeIter iter;
- gboolean sensitive;
- gchar * uri;
-
- data = get_plugin_data (window);
-
- tree_view = GTK_TREE_VIEW (gedit_file_browser_widget_get_browser_view (data->tree_widget));
- model = gtk_tree_view_get_model (tree_view);
-
- if (!GEDIT_IS_FILE_BROWSER_STORE (model))
- return;
-
- sensitive = gedit_file_browser_widget_get_selected_directory (data->tree_widget, &iter);
-
- if (sensitive) {
- gtk_tree_model_get (model, &iter,
- GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
- &uri, -1);
-
- sensitive = gedit_utils_uri_has_file_scheme (uri);
- g_free (uri);
- }
-
- gtk_action_set_sensitive (
- gtk_action_group_get_action (data->single_selection_action_group,
- "OpenTerminal"),
- sensitive);
-}
-
-#define POPUP_UI "" \
-"<ui>" \
-" <popup name=\"FilePopup\">" \
-" <placeholder name=\"FilePopup_Opt1\">" \
-" <menuitem action=\"SetActiveRoot\"/>" \
-" </placeholder>" \
-" <placeholder name=\"FilePopup_Opt4\">" \
-" <menuitem action=\"OpenTerminal\"/>" \
-" </placeholder>" \
-" </popup>" \
-" <popup name=\"BookmarkPopup\">" \
-" <placeholder name=\"BookmarkPopup_Opt1\">" \
-" <menuitem action=\"SetActiveRoot\"/>" \
-" </placeholder>" \
-" </popup>" \
-"</ui>"
-
-static GtkActionEntry extra_actions[] =
-{
- {"SetActiveRoot", GTK_STOCK_JUMP_TO, N_("_Set root to active document"),
- NULL,
- N_("Set the root to the active document location"),
- G_CALLBACK (on_action_set_active_root)}
-};
-
-static GtkActionEntry extra_single_selection_actions[] = {
- {"OpenTerminal", "utilities-terminal", N_("_Open terminal here"),
- NULL,
- N_("Open a terminal at the currently opened directory"),
- G_CALLBACK (on_action_open_terminal)}
-};
-
-static void
-add_popup_ui (GeditWindow * window)
-{
- GeditFileBrowserPluginData * data;
- GtkUIManager * manager;
- GtkActionGroup * action_group;
- GError * error = NULL;
-
- data = get_plugin_data (window);
- manager = gedit_file_browser_widget_get_ui_manager (data->tree_widget);
-
- action_group = gtk_action_group_new ("FileBrowserPluginExtra");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group,
- extra_actions,
- G_N_ELEMENTS (extra_actions),
- window);
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- data->action_group = action_group;
-
- action_group = gtk_action_group_new ("FileBrowserPluginSingleSelectionExtra");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group,
- extra_single_selection_actions,
- G_N_ELEMENTS (extra_single_selection_actions),
- window);
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- data->single_selection_action_group = action_group;
-
- data->merge_id = gtk_ui_manager_add_ui_from_string (manager,
- POPUP_UI,
- -1,
- &error);
-
- if (data->merge_id == 0) {
- g_warning("Unable to merge UI: %s", error->message);
- g_error_free(error);
- }
-}
-
-static void
-remove_popup_ui (GeditWindow * window)
-{
- GeditFileBrowserPluginData * data;
- GtkUIManager * manager;
-
- data = get_plugin_data (window);
- manager = gedit_file_browser_widget_get_ui_manager (data->tree_widget);
- gtk_ui_manager_remove_ui (manager, data->merge_id);
-
- gtk_ui_manager_remove_action_group (manager, data->action_group);
- g_object_unref (data->action_group);
-
- gtk_ui_manager_remove_action_group (manager, data->single_selection_action_group);
- g_object_unref (data->single_selection_action_group);
-}
-
-static void
-impl_updateui (GeditPlugin * plugin, GeditWindow * window)
-{
- GeditFileBrowserPluginData * data;
- GeditDocument * doc;
-
- data = get_plugin_data (window);
-
- doc = gedit_window_get_active_document (window);
-
- gtk_action_set_sensitive (gtk_action_group_get_action (data->action_group,
- "SetActiveRoot"),
- doc != NULL &&
- !gedit_document_is_untitled (doc));
-}
-
-static void
-impl_activate (GeditPlugin * plugin, GeditWindow * window)
-{
- GeditPanel * panel;
- GeditFileBrowserPluginData * data;
- GtkWidget * image;
- GdkPixbuf * pixbuf;
- GeditFileBrowserStore * store;
- gchar *data_dir;
-
- data = g_new0 (GeditFileBrowserPluginData, 1);
-
- data_dir = gedit_plugin_get_data_dir (plugin);
- data->tree_widget = GEDIT_FILE_BROWSER_WIDGET (gedit_file_browser_widget_new (data_dir));
- g_free (data_dir);
-
- g_signal_connect (data->tree_widget,
- "uri-activated",
- G_CALLBACK (on_uri_activated_cb), window);
-
- g_signal_connect (data->tree_widget,
- "error", G_CALLBACK (on_error_cb), window);
-
- g_signal_connect (data->tree_widget,
- "notify::filter-pattern",
- G_CALLBACK (on_filter_pattern_changed_cb),
- window);
-
- g_signal_connect (data->tree_widget,
- "confirm-delete",
- G_CALLBACK (on_confirm_delete_cb),
- window);
-
- g_signal_connect (data->tree_widget,
- "confirm-no-trash",
- G_CALLBACK (on_confirm_no_trash_cb),
- window);
-
- g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW
- (gedit_file_browser_widget_get_browser_view
- (data->tree_widget))),
- "changed",
- G_CALLBACK (on_selection_changed_cb),
- window);
-
- panel = gedit_window_get_side_panel (window);
- pixbuf = gedit_file_browser_utils_pixbuf_from_theme("system-file-manager",
- GTK_ICON_SIZE_MENU);
-
- if (pixbuf) {
- image = gtk_image_new_from_pixbuf(pixbuf);
- g_object_unref(pixbuf);
- } else {
- image = gtk_image_new_from_stock(GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU);
- }
-
- gtk_widget_show(image);
- gedit_panel_add_item (panel,
- GTK_WIDGET (data->tree_widget),
- _("File Browser"),
- image);
- gtk_widget_show (GTK_WIDGET (data->tree_widget));
- g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, data);
-
- add_popup_ui (window);
-
- /* Restore filter options */
- restore_filter (data);
-
- /* Install caja preferences */
- install_caja_prefs (data);
-
- /* Connect signals to store the last visited location */
- g_signal_connect (gedit_file_browser_widget_get_browser_view (data->tree_widget),
- "notify::model",
- G_CALLBACK (on_model_set_cb),
- window);
-
- store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
- g_signal_connect (store,
- "notify::virtual-root",
- G_CALLBACK (on_virtual_root_changed_cb),
- window);
-
- g_signal_connect (store,
- "notify::filter-mode",
- G_CALLBACK (on_filter_mode_changed_cb),
- window);
-
- g_signal_connect (store,
- "rename",
- G_CALLBACK (on_rename_cb),
- window);
-
- g_signal_connect (window,
- "tab-added",
- G_CALLBACK (on_tab_added_cb),
- data);
-
- /* Register messages on the bus */
- gedit_file_browser_messages_register (window, data->tree_widget);
-
- impl_updateui (plugin, window);
-}
-
-static void
-impl_deactivate (GeditPlugin * plugin, GeditWindow * window)
-{
- GeditFileBrowserPluginData * data;
- GeditPanel * panel;
- MateConfClient *client;
-
- data = get_plugin_data (window);
-
- /* Unregister messages from the bus */
- gedit_file_browser_messages_unregister (window);
-
- /* Disconnect signals */
- g_signal_handlers_disconnect_by_func (window,
- G_CALLBACK (on_tab_added_cb),
- data);
-
- client = mateconf_client_get_default ();
- mateconf_client_remove_dir (client, CAJA_CLICK_POLICY_BASE_KEY, NULL);
-
- if (data->click_policy_handle)
- mateconf_client_notify_remove (client, data->click_policy_handle);
-
- if (data->enable_delete_handle)
- mateconf_client_notify_remove (client, data->enable_delete_handle);
-
- if (data->confirm_trash_handle)
- mateconf_client_notify_remove (client, data->confirm_trash_handle);
-
- g_object_unref (client);
- remove_popup_ui (window);
-
- panel = gedit_window_get_side_panel (window);
- gedit_panel_remove_item (panel, GTK_WIDGET (data->tree_widget));
-
- g_free (data);
- g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL);
-}
-
-static void
-filetree_plugin_class_init (GeditFileBrowserPluginClass * klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GeditPluginClass * plugin_class = GEDIT_PLUGIN_CLASS (klass);
-
- object_class->finalize = filetree_plugin_finalize;
-
- plugin_class->activate = impl_activate;
- plugin_class->deactivate = impl_deactivate;
- plugin_class->update_ui = impl_updateui;
-
- g_type_class_add_private (object_class,
- sizeof (GeditFileBrowserPluginPrivate));
-}
-
-/* Callbacks */
-static void
-on_uri_activated_cb (GeditFileBrowserWidget * tree_widget,
- gchar const *uri, GeditWindow * window)
-{
- gedit_commands_load_uri (window, uri, NULL, 0);
-}
-
-static void
-on_error_cb (GeditFileBrowserWidget * tree_widget,
- guint code, gchar const *message, GeditWindow * window)
-{
- gchar * title;
- GtkWidget * dlg;
- GeditFileBrowserPluginData * data;
-
- data = get_plugin_data (window);
-
- /* Do not show the error when the root has been set automatically */
- if (data->auto_root && (code == GEDIT_FILE_BROWSER_ERROR_SET_ROOT ||
- code == GEDIT_FILE_BROWSER_ERROR_LOAD_DIRECTORY))
- {
- /* Show bookmarks */
- gedit_file_browser_widget_show_bookmarks (data->tree_widget);
- return;
- }
-
- switch (code) {
- case GEDIT_FILE_BROWSER_ERROR_NEW_DIRECTORY:
- title =
- _("An error occurred while creating a new directory");
- break;
- case GEDIT_FILE_BROWSER_ERROR_NEW_FILE:
- title = _("An error occurred while creating a new file");
- break;
- case GEDIT_FILE_BROWSER_ERROR_RENAME:
- title =
- _
- ("An error occurred while renaming a file or directory");
- break;
- case GEDIT_FILE_BROWSER_ERROR_DELETE:
- title =
- _
- ("An error occurred while deleting a file or directory");
- break;
- case GEDIT_FILE_BROWSER_ERROR_OPEN_DIRECTORY:
- title =
- _
- ("An error occurred while opening a directory in the file manager");
- break;
- case GEDIT_FILE_BROWSER_ERROR_SET_ROOT:
- title =
- _("An error occurred while setting a root directory");
- break;
- case GEDIT_FILE_BROWSER_ERROR_LOAD_DIRECTORY:
- title =
- _("An error occurred while loading a directory");
- break;
- default:
- title = _("An error occurred");
- break;
- }
-
- dlg = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_MODAL |
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- "%s", title);
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg),
- "%s", message);
-
- gtk_dialog_run (GTK_DIALOG (dlg));
- gtk_widget_destroy (dlg);
-}
-
-static void
-on_model_set_cb (GeditFileBrowserView * widget,
- GParamSpec *arg1,
- GeditWindow * window)
-{
- GeditFileBrowserPluginData * data = get_plugin_data (window);
- GtkTreeModel * model;
- MateConfClient * client;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (gedit_file_browser_widget_get_browser_view (data->tree_widget)));
-
- if (model == NULL)
- return;
-
- client = mateconf_client_get_default ();
- mateconf_client_set_bool (client,
- FILE_BROWSER_BASE_KEY "/on_load/tree_view",
- GEDIT_IS_FILE_BROWSER_STORE (model),
- NULL);
- g_object_unref (client);
-}
-
-static void
-on_filter_mode_changed_cb (GeditFileBrowserStore * model,
- GParamSpec * param,
- GeditWindow * window)
-{
- MateConfClient * client;
- GeditFileBrowserStoreFilterMode mode;
-
- client = mateconf_client_get_default ();
-
- if (!client)
- return;
-
- mode = gedit_file_browser_store_get_filter_mode (model);
-
- if ((mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN) &&
- (mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY)) {
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/filter_mode",
- "hidden_and_binary",
- NULL);
- } else if (mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN) {
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/filter_mode",
- "hidden",
- NULL);
- } else if (mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY) {
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/filter_mode",
- "binary",
- NULL);
- } else {
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/filter_mode",
- "none",
- NULL);
- }
-
- g_object_unref (client);
-
-}
-
-static void
-on_rename_cb (GeditFileBrowserStore * store,
- const gchar * olduri,
- const gchar * newuri,
- GeditWindow * window)
-{
- GeditApp * app;
- GList * documents;
- GList * item;
- GeditDocument * doc;
- GFile * docfile;
- GFile * oldfile;
- GFile * newfile;
- gchar * uri;
-
- /* Find all documents and set its uri to newuri where it matches olduri */
- app = gedit_app_get_default ();
- documents = gedit_app_get_documents (app);
-
- oldfile = g_file_new_for_uri (olduri);
- newfile = g_file_new_for_uri (newuri);
-
- for (item = documents; item; item = item->next) {
- doc = GEDIT_DOCUMENT (item->data);
- uri = gedit_document_get_uri (doc);
-
- if (!uri)
- continue;
-
- docfile = g_file_new_for_uri (uri);
-
- if (g_file_equal (docfile, oldfile)) {
- gedit_document_set_uri (doc, newuri);
- } else {
- gchar *relative;
-
- relative = g_file_get_relative_path (oldfile, docfile);
-
- if (relative) {
- /* relative now contains the part in docfile without
- the prefix oldfile */
-
- g_object_unref (docfile);
- g_free (uri);
-
- docfile = g_file_get_child (newfile, relative);
- uri = g_file_get_uri (docfile);
-
- gedit_document_set_uri (doc, uri);
- }
-
- g_free (relative);
- }
-
- g_free (uri);
- g_object_unref (docfile);
- }
-
- g_object_unref (oldfile);
- g_object_unref (newfile);
-
- g_list_free (documents);
-}
-
-static void
-on_filter_pattern_changed_cb (GeditFileBrowserWidget * widget,
- GParamSpec * param,
- GeditWindow * window)
-{
- MateConfClient * client;
- gchar * pattern;
-
- client = mateconf_client_get_default ();
-
- if (!client)
- return;
-
- g_object_get (G_OBJECT (widget), "filter-pattern", &pattern, NULL);
-
- if (pattern == NULL)
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/filter_pattern",
- "",
- NULL);
- else
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/filter_pattern",
- pattern,
- NULL);
-
- g_free (pattern);
-}
-
-static void
-on_virtual_root_changed_cb (GeditFileBrowserStore * store,
- GParamSpec * param,
- GeditWindow * window)
-{
- GeditFileBrowserPluginData * data = get_plugin_data (window);
- gchar * root;
- gchar * virtual_root;
- MateConfClient * client;
-
- root = gedit_file_browser_store_get_root (store);
-
- if (!root)
- return;
-
- client = mateconf_client_get_default ();
-
- if (!client)
- return;
-
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/on_load/root",
- root,
- NULL);
-
- virtual_root = gedit_file_browser_store_get_virtual_root (store);
-
- if (!virtual_root) {
- /* Set virtual to same as root then */
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/on_load/virtual_root",
- root,
- NULL);
- } else {
- mateconf_client_set_string (client,
- FILE_BROWSER_BASE_KEY "/on_load/virtual_root",
- virtual_root,
- NULL);
- }
-
- g_signal_handlers_disconnect_by_func (window,
- G_CALLBACK (on_tab_added_cb),
- data);
-
- g_object_unref (client);
- g_free (root);
- g_free (virtual_root);
-}
-
-static void
-on_tab_added_cb (GeditWindow * window,
- GeditTab * tab,
- GeditFileBrowserPluginData * data)
-{
- MateConfClient *client;
- gboolean open;
- gboolean load_default = TRUE;
-
- client = mateconf_client_get_default ();
-
- if (!client)
- return;
-
- open = mateconf_client_get_bool (client,
- FILE_BROWSER_BASE_KEY "/open_at_first_doc",
- NULL);
-
- if (open) {
- GeditDocument *doc;
- gchar *uri;
-
- doc = gedit_tab_get_document (tab);
-
- uri = gedit_document_get_uri (doc);
-
- if (uri != NULL && gedit_utils_uri_has_file_scheme (uri)) {
- prepare_auto_root (data);
- set_root_from_doc (data, doc);
- load_default = FALSE;
- }
-
- g_free (uri);
- }
-
- if (load_default)
- restore_default_location (data);
-
- g_object_unref (client);
-
- /* Disconnect this signal, it's only called once */
- g_signal_handlers_disconnect_by_func (window,
- G_CALLBACK (on_tab_added_cb),
- data);
-}
-
-static gchar *
-get_filename_from_path (GtkTreeModel *model, GtkTreePath *path)
-{
- GtkTreeIter iter;
- gchar *uri;
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
- -1);
-
- return gedit_file_browser_utils_uri_basename (uri);
-}
-
-static gboolean
-on_confirm_no_trash_cb (GeditFileBrowserWidget * widget,
- GList * files,
- GeditWindow * window)
-{
- gchar *normal;
- gchar *message;
- gchar *secondary;
- gboolean result;
-
- message = _("Cannot move file to trash, do you\nwant to delete permanently?");
-
- if (files->next == NULL) {
- normal = gedit_file_browser_utils_file_basename (G_FILE (files->data));
- secondary = g_strdup_printf (_("The file \"%s\" cannot be moved to the trash."), normal);
- g_free (normal);
- } else {
- secondary = g_strdup (_("The selected files cannot be moved to the trash."));
- }
-
- result = gedit_file_browser_utils_confirmation_dialog (window,
- GTK_MESSAGE_QUESTION,
- message,
- secondary,
- GTK_STOCK_DELETE,
- NULL);
- g_free (secondary);
-
- return result;
-}
-
-static gboolean
-on_confirm_delete_cb (GeditFileBrowserWidget *widget,
- GeditFileBrowserStore *store,
- GList *paths,
- GeditWindow *window)
-{
- gchar *normal;
- gchar *message;
- gchar *secondary;
- gboolean result;
- GeditFileBrowserPluginData *data;
-
- data = get_plugin_data (window);
-
- if (!data->confirm_trash)
- return TRUE;
-
- if (paths->next == NULL) {
- normal = get_filename_from_path (GTK_TREE_MODEL (store), (GtkTreePath *)(paths->data));
- message = g_strdup_printf (_("Are you sure you want to permanently delete \"%s\"?"), normal);
- g_free (normal);
- } else {
- message = g_strdup (_("Are you sure you want to permanently delete the selected files?"));
- }
-
- secondary = _("If you delete an item, it is permanently lost.");
-
- result = gedit_file_browser_utils_confirmation_dialog (window,
- GTK_MESSAGE_QUESTION,
- message,
- secondary,
- GTK_STOCK_DELETE,
- NULL);
-
- g_free (message);
-
- return result;
-}
-
-// ex:ts=8:noet: