[gedit/wip/browser-menu] Handle open in terminal action



commit f8d39fee86824a18418bfc1850832846a4e4f08b
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Thu Apr 18 20:42:10 2013 +0200

    Handle open in terminal action

 plugins/filebrowser/gedit-file-browser-plugin.c | 33 ++++++-------------
 plugins/filebrowser/gedit-file-browser-widget.c | 42 ++++++++++++++++++++++++-
 plugins/filebrowser/gedit-file-browser-widget.h |  2 ++
 3 files changed, 53 insertions(+), 24 deletions(-)
---
diff --git a/plugins/filebrowser/gedit-file-browser-plugin.c b/plugins/filebrowser/gedit-file-browser-plugin.c
index 30fa726..81f054b 100644
--- a/plugins/filebrowser/gedit-file-browser-plugin.c
+++ b/plugins/filebrowser/gedit-file-browser-plugin.c
@@ -440,35 +440,18 @@ get_terminal (GeditFileBrowserPlugin *plugin)
 }
 
 static void
-on_action_open_terminal (GtkAction              *action,
-                         GeditFileBrowserPlugin *plugin)
+open_in_terminal (GeditFileBrowserWidget *widget,
+                  GFile                  *location,
+                  GeditFileBrowserPlugin *plugin)
 {
-       GeditFileBrowserPluginPrivate *priv = plugin->priv;
-       GFile *file;
-
-       GtkTreeIter iter;
-       GeditFileBrowserStore *store;
-
-       /* Get the current directory */
-       if (!gedit_file_browser_widget_get_selected_directory (priv->tree_widget, &iter))
-               return;
-
-       store = gedit_file_browser_widget_get_browser_store (priv->tree_widget);
-       gtk_tree_model_get (GTK_TREE_MODEL (store),
-                           &iter,
-                           GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
-                           &file,
-                           -1);
-
-       if (file)
+       if (location)
        {
                gchar *terminal;
                gchar *local;
                gchar *argv[2];
 
                terminal = get_terminal (plugin);
-
-               local = g_file_get_path (file);
+               local = g_file_get_path (location);
 
                argv[0] = terminal;
                argv[1] = NULL;
@@ -484,7 +467,6 @@ on_action_open_terminal (GtkAction              *action,
 
                g_free (terminal);
                g_free (local);
-               g_object_unref (file);
        }
 }
 /*
@@ -573,6 +555,11 @@ gedit_file_browser_plugin_activate (GeditWindowActivatable *activatable)
                          G_CALLBACK (on_confirm_no_trash_cb),
                          priv->window);
 
+       g_signal_connect (priv->tree_widget,
+                         "open-in-terminal",
+                         G_CALLBACK (open_in_terminal),
+                         priv->window);
+
        /*g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW
                          (gedit_file_browser_widget_get_browser_view
                          (priv->tree_widget))),
diff --git a/plugins/filebrowser/gedit-file-browser-widget.c b/plugins/filebrowser/gedit-file-browser-widget.c
index 85264a9..080ce85 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.c
+++ b/plugins/filebrowser/gedit-file-browser-widget.c
@@ -81,6 +81,7 @@ enum
        ERROR,
        CONFIRM_DELETE,
        CONFIRM_NO_TRASH,
+       OPEN_IN_TERMINAL,
        NUM_SIGNALS
 };
 
@@ -236,6 +237,9 @@ static void change_show_binary_state           (GSimpleAction          *action,
 static void bookmark_open_activated            (GSimpleAction          *action,
                                                 GVariant               *parameter,
                                                 gpointer                user_data);
+static void open_in_terminal_activated         (GSimpleAction          *action,
+                                                GVariant               *parameter,
+                                                gpointer                user_data);
 
 G_DEFINE_DYNAMIC_TYPE (GeditFileBrowserWidget, gedit_file_browser_widget, GTK_TYPE_GRID)
 
@@ -480,6 +484,18 @@ gedit_file_browser_widget_class_init (GeditFileBrowserWidgetClass *klass)
                          1,
                          G_TYPE_POINTER);
 
+       signals[OPEN_IN_TERMINAL] =
+           g_signal_new ("open-in-terminal",
+                         G_OBJECT_CLASS_TYPE (object_class),
+                         G_SIGNAL_RUN_LAST,
+                         G_STRUCT_OFFSET (GeditFileBrowserWidgetClass, open_in_terminal),
+                         NULL,
+                         NULL,
+                         g_cclosure_marshal_VOID__OBJECT,
+                         G_TYPE_NONE,
+                         1,
+                         G_TYPE_FILE);
+
        /* Bind class to template */
        gtk_widget_class_set_template_from_resource (widget_class,
                                                     
"/org/gnome/gedit/plugins/file-browser/ui/gedit-file-browser-widget.ui");
@@ -935,7 +951,7 @@ static GActionEntry browser_entries[] = {
        { "delete", delete_activated },
        { "refresh_view", refresh_view_activated },
        { "view_folder", view_folder_activated },
-       //{ "open_in_terminal", open_in_terminal_activated },
+       { "open_in_terminal", open_in_terminal_activated },
        { "show_hidden", activate_toggle, NULL, "false", change_show_hidden_state },
        { "show_binary", activate_toggle, NULL, "false", change_show_binary_state },
        { "bookmark_open", bookmark_open_activated },
@@ -2932,6 +2948,30 @@ bookmark_open_activated (GSimpleAction *action,
        }
 }
 
+static void
+open_in_terminal_activated (GSimpleAction *action,
+                            GVariant      *parameter,
+                            gpointer       user_data)
+{
+       GeditFileBrowserWidget *widget = GEDIT_FILE_BROWSER_WIDGET (user_data);
+       GtkTreeIter iter;
+       GFile *file;
+
+       /* Get the current directory */
+       if (!gedit_file_browser_widget_get_selected_directory (widget, &iter))
+               return;
+
+       gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->file_store),
+                           &iter,
+                           GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+                           &file,
+                           -1);
+
+       g_signal_emit (widget, signals[OPEN_IN_TERMINAL], 0, file);
+
+       g_object_unref (file);
+}
+
 void
 _gedit_file_browser_widget_register_type (GTypeModule *type_module)
 {
diff --git a/plugins/filebrowser/gedit-file-browser-widget.h b/plugins/filebrowser/gedit-file-browser-widget.h
index 24785f9..0df4910 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.h
+++ b/plugins/filebrowser/gedit-file-browser-widget.h
@@ -68,6 +68,8 @@ struct _GeditFileBrowserWidgetClass
                                         GList                  *list);
        gboolean (* confirm_no_trash)   (GeditFileBrowserWidget *widget,
                                         GList                  *list);
+       void (* open_in_terminal)       (GeditFileBrowserWidget *widget,
+                                        GFile                  *location);
 };
 
 GType           gedit_file_browser_widget_get_type            (void) G_GNUC_CONST;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]