SF.net SVN: geany-plugins:[1228] trunk/geany-plugins/treebrowser
dimitrov-adrian at users.sourceforge.net
dimitrov-adrian at xxxxx
Sat Apr 10 17:37:43 UTC 2010
Revision: 1228
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1228&view=rev
Author: dimitrov-adrian
Date: 2010-04-10 17:37:43 +0000 (Sat, 10 Apr 2010)
Log Message:
-----------
Treebrowser: make right click menu dynamic
Modified Paths:
--------------
trunk/geany-plugins/treebrowser/ChangeLog
trunk/geany-plugins/treebrowser/src/treebrowser.c
Modified: trunk/geany-plugins/treebrowser/ChangeLog
===================================================================
--- trunk/geany-plugins/treebrowser/ChangeLog 2010-04-10 16:59:27 UTC (rev 1227)
+++ trunk/geany-plugins/treebrowser/ChangeLog 2010-04-10 17:37:43 UTC (rev 1228)
@@ -27,6 +27,7 @@
some string changed in prefs dialog
added option to close document if it is deleted from treebrowser
highlighing addressbar if typed directory not exists
+ make right click menu dynamic
31-03-2010 Adrian Dimitrov <dimitrov.adrian at gmail.com>
Modified: trunk/geany-plugins/treebrowser/src/treebrowser.c
===================================================================
--- trunk/geany-plugins/treebrowser/src/treebrowser.c 2010-04-10 16:59:27 UTC (rev 1227)
+++ trunk/geany-plugins/treebrowser/src/treebrowser.c 2010-04-10 17:37:43 UTC (rev 1228)
@@ -389,6 +389,13 @@
* ------------------*/
static void
+on_menu_close(GtkMenuItem *menuitem, gchar *uri)
+{
+ if (g_file_test(uri, G_FILE_TEST_EXISTS))
+ document_close(document_find_by_filename(uri));
+}
+
+static void
on_menu_go_up(GtkMenuItem *menuitem, gpointer *user_data)
{
treebrowser_chroot(g_path_get_dirname(addressbar_last_address));
@@ -401,60 +408,39 @@
}
static void
-on_menu_open_externally(GtkMenuItem *menuitem, gpointer *user_data)
+on_menu_open_externally(GtkMenuItem *menuitem, gchar *uri)
{
-
- GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
- GtkTreeIter iter;
- GtkTreeModel *model;
- gchar *uri;
-
gchar *cmd, *locale_cmd, *dir;
GString *cmd_str = g_string_new(CONFIG_OPEN_EXTERNAL_CMD);
GError *error = NULL;
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- {
- gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
+ dir = g_file_test(uri, G_FILE_TEST_IS_DIR) ? g_strdup(uri) : g_path_get_dirname(uri);
- dir = g_file_test(uri, G_FILE_TEST_IS_DIR) ? g_strdup(uri) : g_path_get_dirname(uri);
+ utils_string_replace_all(cmd_str, "%f", uri);
+ utils_string_replace_all(cmd_str, "%d", dir);
- utils_string_replace_all(cmd_str, "%f", uri);
- utils_string_replace_all(cmd_str, "%d", dir);
-
- cmd = g_string_free(cmd_str, FALSE);
- locale_cmd = utils_get_locale_from_utf8(cmd);
- if (! g_spawn_command_line_async(locale_cmd, &error))
- {
- gchar *c = strchr(cmd, ' ');
- if (c != NULL)
- *c = '\0';
- ui_set_statusbar(TRUE,
- _("Could not execute configured external command '%s' (%s)."),
- cmd, error->message);
- g_error_free(error);
- }
- g_free(locale_cmd);
- g_free(cmd);
- g_free(dir);
+ cmd = g_string_free(cmd_str, FALSE);
+ locale_cmd = utils_get_locale_from_utf8(cmd);
+ if (! g_spawn_command_line_async(locale_cmd, &error))
+ {
+ gchar *c = strchr(cmd, ' ');
+ if (c != NULL)
+ *c = '\0';
+ ui_set_statusbar(TRUE,
+ _("Could not execute configured external command '%s' (%s)."),
+ cmd, error->message);
+ g_error_free(error);
}
+ g_free(locale_cmd);
+ g_free(cmd);
+ g_free(dir);
}
static void
-on_menu_set_as_root(GtkMenuItem *menuitem, const gchar *type)
+on_menu_set_as_root(GtkMenuItem *menuitem, gchar *uri)
{
-
- GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
- GtkTreeIter iter;
- GtkTreeModel *model;
- gchar *uri;
-
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- {
- gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
- if (g_file_test(uri, G_FILE_TEST_IS_DIR))
- treebrowser_chroot(uri);
- }
+ if (g_file_test(uri, G_FILE_TEST_IS_DIR))
+ treebrowser_chroot(uri);
}
static void
@@ -610,12 +596,24 @@
}
static GtkWidget*
-create_popup_menu(gpointer *user_data)
+create_popup_menu(gchar *name, gchar *uri)
{
+ gboolean is_exists = g_file_test(uri, G_FILE_TEST_EXISTS);
+ gboolean is_dir = is_exists ? g_file_test(uri, G_FILE_TEST_IS_DIR) : FALSE;
GtkWidget *item, *menu;
menu = gtk_menu_new();
+ if (document_find_by_filename(uri) != NULL)
+ {
+ item = ui_image_menu_item_new(GTK_STOCK_CLOSE, g_strdup_printf(_("Close: %s"), name));
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ g_signal_connect(item, "activate", G_CALLBACK(on_menu_close), uri);
+
+ item = gtk_separator_menu_item_new();
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ }
+
item = ui_image_menu_item_new(GTK_STOCK_GO_UP, _("Go up"));
gtk_container_add(GTK_CONTAINER(menu), item);
g_signal_connect(item, "activate", G_CALLBACK(on_menu_go_up), NULL);
@@ -624,16 +622,21 @@
gtk_container_add(GTK_CONTAINER(menu), item);
g_signal_connect(item, "activate", G_CALLBACK(on_menu_current_path), NULL);
- item = ui_image_menu_item_new(GTK_STOCK_OPEN, _("Open externally"));
- gtk_container_add(GTK_CONTAINER(menu), item);
- g_signal_connect(item, "activate", G_CALLBACK(on_menu_open_externally), NULL);
+ if (is_exists)
+ {
+ item = ui_image_menu_item_new(GTK_STOCK_OPEN, _("Open externally"));
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ g_signal_connect(item, "activate", G_CALLBACK(on_menu_open_externally), uri);
+ }
- item = ui_image_menu_item_new(GTK_STOCK_OPEN, _("Set as root"));
- gtk_container_add(GTK_CONTAINER(menu), item);
- g_signal_connect(item, "activate", G_CALLBACK(on_menu_set_as_root), NULL);
+ if (is_dir)
+ {
+ item = ui_image_menu_item_new(GTK_STOCK_OPEN, _("Set as root"));
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ g_signal_connect(item, "activate", G_CALLBACK(on_menu_set_as_root), uri);
+ }
item = gtk_separator_menu_item_new();
- gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
item = ui_image_menu_item_new(GTK_STOCK_ADD, _("Create new directory"));
@@ -644,16 +647,18 @@
gtk_container_add(GTK_CONTAINER(menu), item);
g_signal_connect(item, "activate", G_CALLBACK(on_menu_create_new_object), "file");
- item = ui_image_menu_item_new(GTK_STOCK_SAVE_AS, _("Rename"));
- gtk_container_add(GTK_CONTAINER(menu), item);
- g_signal_connect(item, "activate", G_CALLBACK(on_menu_rename), NULL);
+ if (is_exists)
+ {
+ item = ui_image_menu_item_new(GTK_STOCK_SAVE_AS, _("Rename"));
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ g_signal_connect(item, "activate", G_CALLBACK(on_menu_rename), NULL);
- item = ui_image_menu_item_new(GTK_STOCK_DELETE, _("Delete"));
- gtk_container_add(GTK_CONTAINER(menu), item);
- g_signal_connect(item, "activate", G_CALLBACK(on_menu_delete), NULL);
+ item = ui_image_menu_item_new(GTK_STOCK_DELETE, _("Delete"));
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ g_signal_connect(item, "activate", G_CALLBACK(on_menu_delete), NULL);
+ }
item = gtk_separator_menu_item_new();
- gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
item = ui_image_menu_item_new(GTK_STOCK_REFRESH, _("Refresh"));
@@ -673,7 +678,6 @@
g_signal_connect(item, "activate", G_CALLBACK(on_menu_collapse_all), NULL);
item = gtk_separator_menu_item_new();
- gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
menu_showbars = gtk_check_menu_item_new_with_mnemonic(_("Show bars"));
@@ -754,14 +758,23 @@
* ------------------ */
static gboolean
-on_treeview_mouseclick(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
+on_treeview_mouseclick(GtkWidget *widget, GdkEventButton *event, GtkTreeSelection *selection)
{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gchar *name = NULL, *uri = NULL;
+
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ {
+ gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter,
+ TREEBROWSER_COLUMN_NAME, &name,
+ TREEBROWSER_COLUMN_URI, &uri,
+ -1);
+ }
+
if (event->button == 3)
{
- static GtkWidget *popup_menu = NULL;
- if (popup_menu == NULL)
- popup_menu = create_popup_menu(user_data);
- gtk_menu_popup(GTK_MENU(popup_menu), NULL, NULL, NULL, NULL, event->button, event->time);
+ gtk_menu_popup(GTK_MENU(create_popup_menu(name, uri)), NULL, NULL, NULL, NULL, event->button, event->time);
return TRUE;
}
return FALSE;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Plugins-Commits
mailing list