Revision: 1966 http://geany.svn.sourceforge.net/geany/?rev=1966&view=rev Author: ntrel Date: 2007-10-22 05:42:19 -0700 (Mon, 22 Oct 2007)
Log Message: ----------- Added File Browser sidebar plugin. Rename 'Open Files' sidebar tab 'Documents'. Add keybindings->send_command() and tm->get_real_path() to the plugin API.
Modified Paths: -------------- trunk/ChangeLog trunk/doc/geany.html trunk/doc/geany.txt trunk/geany.glade trunk/plugins/Makefile.am trunk/plugins/makefile.win32 trunk/po/POTFILES.in trunk/src/interface.c trunk/src/plugindata.h trunk/src/plugins.c trunk/src/treeviews.c trunk/src/utils.c trunk/src/vte.c
Added Paths: ----------- trunk/plugins/filebrowser.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/ChangeLog 2007-10-22 12:42:19 UTC (rev 1966) @@ -1,3 +1,15 @@ +2007-10-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * plugins/filebrowser.c, plugins/Makefile.am, plugins/makefile.win32, + src/interface.c, src/utils.c, src/plugindata.h, src/treeviews.c, + src/vte.c, src/plugins.c, doc/geany.txt, doc/geany.html, + po/POTFILES.in, geany.glade: + Added File Browser sidebar plugin. + Rename 'Open Files' sidebar tab 'Documents'. + Add keybindings->send_command() and tm->get_real_path() to the plugin + API. + + 2007-10-20 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/keyfile.c: Fix possible wrong window title when loading session
Modified: trunk/doc/geany.html =================================================================== --- trunk/doc/geany.html 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/doc/geany.html 2007-10-22 12:42:19 UTC (rev 1966) @@ -3,10 +3,10 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> <title>Geany</title> <meta name="authors" content="Enrico Tröger Nick Treleaven Frank Lanitz" /> -<meta name="date" content="2007-10-18" /> +<meta name="date" content="2007-10-19" /> <style type="text/css">
/* @@ -133,7 +133,7 @@ <br />Nick Treleaven <br />Frank Lanitz</td></tr> <tr><th class="docinfo-name">Date:</th> -<td>2007-10-18</td></tr> +<td>2007-10-19</td></tr> <tr><th class="docinfo-name">Version:</th> <td>0.13</td></tr> </tbody> @@ -1237,10 +1237,10 @@ <h3><a class="toc-backref" href="#id53" id="interface-tab-in-preferences-dialog" name="interface-tab-in-preferences-dialog">Interface tab in preferences dialog</a></h3> <p>Interface tab in preferences dialog</p> <img alt="./images/pref_dialog_interface.png" src="./images/pref_dialog_interface.png" /> -<p>The open files list and the editor tabs are two different ways +<p>The documents list and the editor tabs are two different ways to switch between documents using the mouse. When you hit the key combination to move between tabs, the order is determined by the tab -order, not alphabetical as shown in the open files list (regardless +order, not alphabetical as shown in the documents list (regardless whether or not editor tabs are visible).</p> </div> <div class="section"> @@ -3096,7 +3096,7 @@ <div class="footer"> <hr class="footer" /> <a class="reference" href="geany.txt">View document source</a>. -Generated on: 2007-10-19 14:35 UTC. +Generated on: 2007-10-22 12:32 UTC. Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
</div>
Modified: trunk/doc/geany.txt =================================================================== --- trunk/doc/geany.txt 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/doc/geany.txt 2007-10-22 12:42:19 UTC (rev 1966) @@ -1052,10 +1052,10 @@
.. image:: ./images/pref_dialog_interface.png
-The open files list and the editor tabs are two different ways +The documents list and the editor tabs are two different ways to switch between documents using the mouse. When you hit the key combination to move between tabs, the order is determined by the tab -order, not alphabetical as shown in the open files list (regardless +order, not alphabetical as shown in the documents list (regardless whether or not editor tabs are visible).
Modified: trunk/geany.glade =================================================================== --- trunk/geany.glade 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/geany.glade 2007-10-22 12:42:19 UTC (rev 1966) @@ -2088,7 +2088,7 @@ <child> <widget class="GtkLabel" id="label136"> <property name="visible">True</property> - <property name="label" translatable="yes">Open files</property> + <property name="label" translatable="yes">Documents</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -3690,9 +3690,9 @@ <child> <widget class="GtkCheckButton" id="check_list_openfiles"> <property name="visible">True</property> - <property name="tooltip" translatable="yes">Toggle the open files list on and off</property> + <property name="tooltip" translatable="yes">Toggle the documents list on and off</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Show open files list</property> + <property name="label" translatable="yes">Show documents list</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">False</property> @@ -3711,7 +3711,7 @@ <widget class="GtkCheckButton" id="check_list_openfiles_fullpath"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Show full path name in open files list</property> + <property name="label" translatable="yes">Show full path name in documents list</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">False</property>
Modified: trunk/plugins/Makefile.am =================================================================== --- trunk/plugins/Makefile.am 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/plugins/Makefile.am 2007-10-22 12:42:19 UTC (rev 1966) @@ -10,6 +10,7 @@ htmlchars_la_LDFLAGS = -module -avoid-version export_la_LDFLAGS = -module -avoid-version svndiff_la_LDFLAGS = -module -avoid-version +filebrowser_la_LDFLAGS = -module -avoid-version
if PLUGINS
@@ -18,7 +19,8 @@ classbuilder.la \ htmlchars.la \ export.la \ - svndiff.la + svndiff.la \ + filebrowser.la
# Plugins not to be installed noinst_LTLIBRARIES = \ @@ -29,12 +31,14 @@ htmlchars_la_SOURCES = htmlchars.c export_la_SOURCES = export.c svndiff_la_SOURCES = svndiff.c +filebrowser_la_SOURCES = filebrowser.c
demoplugin_la_LIBADD = $(GTK_LIBS) classbuilder_la_LIBADD = $(GTK_LIBS) htmlchars_la_LIBADD = $(GTK_LIBS) export_la_LIBADD = $(GTK_LIBS) svndiff_la_LIBADD = $(GTK_LIBS) +filebrowser_la_LIBADD = $(GTK_LIBS)
endif # PLUGINS
Added: trunk/plugins/filebrowser.c =================================================================== --- trunk/plugins/filebrowser.c (rev 0) +++ trunk/plugins/filebrowser.c 2007-10-22 12:42:19 UTC (rev 1966) @@ -0,0 +1,409 @@ +/* + * filebrowser.c - this file is part of Geany, a fast and lightweight IDE + * + * Copyright 2007 Enrico Tröger enrico.troeger@uvena.de + * Copyright 2007 Nick Treleaven nick.treleaven@btinternet.com + * + * 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * $Id$ + */ + +/* Sidebar file browser plugin. */ + +#include "geany.h" + +#include <gdk/gdkkeysyms.h> + +#include "support.h" +#include "prefs.h" +#include "document.h" +#include "utils.h" +#include "plugindata.h" + + +PluginFields *plugin_fields; +GeanyData *geany_data; + + +VERSION_CHECK(26) + +PLUGIN_INFO(_("File Browser"), _("Adds a file browser tab to the sidebar."), "0.1") + + +#define doc_array geany_data->doc_array +#define documents geany_data->document +#define utils geany_data->utils +#define ui geany_data->ui +#define support geany_data->support +#define tm geany_data->tm + + +enum +{ + FILEVIEW_COLUMN_ICON = 0, + FILEVIEW_COLUMN_NAME, + FILEVIEW_N_COLUMNS, +}; + +static gboolean show_hidden_files = FALSE; +static gboolean hide_object_files = TRUE; + +static GtkWidget *file_view; +static GtkListStore *file_store; +static GtkTreeIter *last_dir_iter = NULL; + +static GtkWidget *path_entry; +static gchar *current_dir = NULL; // in locale-encoding + + +// Returns: whether name should be hidden. +static gboolean check_hidden(const gchar *basename) +{ + gsize len; + + if (! NZV(basename)) + return FALSE; + + if (basename[0] == '.') + return TRUE; + + len = strlen(basename); + if (basename[len - 1] == '~') + return TRUE; + + if (hide_object_files) + { + const gchar *exts[] = {".o", ".obj", ".so", ".dll", ".a", ".lib"}; + guint i; + + for (i = 0; i < G_N_ELEMENTS(exts); i++) + { + const gchar *ext = exts[i]; + + if (utils->str_equal(&basename[len - strlen(ext)], ext)) + return TRUE; + } + } + return FALSE; +} + + +// name is in locale encoding +static void add_item(const gchar *name) +{ + GtkTreeIter iter; + gchar *fname, *utf8_name; + gboolean dir; + + if (! show_hidden_files && check_hidden(name)) + return; + + fname = g_strconcat(current_dir, G_DIR_SEPARATOR_S, name, NULL); + dir = g_file_test(fname, G_FILE_TEST_IS_DIR); + g_free(fname); + + if (dir) + { + if (last_dir_iter == NULL) + gtk_list_store_prepend(file_store, &iter); + else + { + gtk_list_store_insert_after(file_store, &iter, last_dir_iter); + gtk_tree_iter_free(last_dir_iter); + } + last_dir_iter = gtk_tree_iter_copy(&iter); + } + else + gtk_list_store_append(file_store, &iter); + + utf8_name = utils->get_utf8_from_locale(name); + + gtk_list_store_set(file_store, &iter, + FILEVIEW_COLUMN_ICON, (dir) ? GTK_STOCK_DIRECTORY : GTK_STOCK_FILE, + FILEVIEW_COLUMN_NAME, utf8_name, -1); + g_free(utf8_name); +} + + +static void clear() +{ + gtk_list_store_clear(file_store); + + // reset the directory item pointer + if (last_dir_iter != NULL) + gtk_tree_iter_free(last_dir_iter); + last_dir_iter = NULL; +} + + +// recreate the tree model from current_dir. +static void refresh() +{ + gchar *utf8_dir; + GSList *list; + + clear(); + + // TODO: really, we don't want to dereference symlinks + setptr(current_dir, tm->get_real_path(current_dir)); + + utf8_dir = utils->get_utf8_from_locale(current_dir); + gtk_entry_set_text(GTK_ENTRY(path_entry), utf8_dir); + g_free(utf8_dir); + + list = utils->get_file_list(current_dir, NULL, NULL); + if (list != NULL) + { + g_slist_foreach(list, (GFunc) add_item, NULL); + g_slist_foreach(list, (GFunc) g_free, NULL); + g_slist_free(list); + } +} + + +static void on_current_path() +{ + gchar *fname; + gchar *dir; + gint idx = documents->get_cur_idx(); + + if (! DOC_IDX_VALID(idx)) + return; + + fname = DOC_FILENAME(idx); + fname = utils->get_locale_from_utf8(fname); + dir = g_path_get_dirname(fname); + g_free(fname); + + setptr(current_dir, dir); + refresh(); +} + + +static void handle_selection(GList *list, GtkTreeSelection *treesel) +{ + GList *item; + GtkTreeModel *model = GTK_TREE_MODEL(file_store); + GtkTreePath *treepath; + GtkTreeIter iter; + gboolean dir_found = FALSE; + + for (item = list; item != NULL; item = g_list_next(item)) + { + gchar *icon; + + treepath = (GtkTreePath*) item->data; + gtk_tree_model_get_iter(model, &iter, treepath); + gtk_tree_model_get(model, &iter, FILEVIEW_COLUMN_ICON, &icon, -1); + + if (utils->str_equal(icon, GTK_STOCK_DIRECTORY)) + { + dir_found = TRUE; + g_free(icon); + break; + } + g_free(icon); + } + + if (dir_found && gtk_tree_selection_count_selected_rows(treesel) > 1) + { + ui->set_statusbar(FALSE, _("Too many items selected!")); + return; + } + + for (item = list; item != NULL; item = g_list_next(item)) + { + gchar *name, *fname; + + treepath = (GtkTreePath*) item->data; + gtk_tree_model_get_iter(model, &iter, treepath); + gtk_tree_model_get(model, &iter, FILEVIEW_COLUMN_NAME, &name, -1); + + setptr(name, utils->get_locale_from_utf8(name)); + fname = g_strconcat(current_dir, G_DIR_SEPARATOR_S, name, NULL); + g_free(name); + + if (dir_found) + { + setptr(current_dir, fname); + refresh(); + return; + } + else + { + documents->open_file(fname, FALSE, NULL, NULL); + g_free(fname); + } + } +} + + +static void open_selected_files() +{ + GtkTreeSelection *treesel; + GtkTreeModel *model; + GList *list; + + treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(file_view)); + + list = gtk_tree_selection_get_selected_rows(treesel, &model); + handle_selection(list, treesel); + + g_list_foreach(list, (GFunc) gtk_tree_path_free, NULL); + g_list_free(list); +} + + +static gboolean on_button_press(GtkWidget *widget, GdkEventButton *event, gpointer user_data) +{ + if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) + open_selected_files(); + return FALSE; +} + + +static void on_go_home() +{ + setptr(current_dir, g_strdup(g_get_home_dir())); + refresh(); +} + + +static void on_go_up() +{ + setptr(current_dir, g_build_path(G_DIR_SEPARATOR_S, current_dir, "..", NULL)); + refresh(); +} + + +static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event->keyval == GDK_Return + || event->keyval == GDK_ISO_Enter + || event->keyval == GDK_KP_Enter + || event->keyval == GDK_space) + open_selected_files(); + + if ((event->keyval == GDK_Up || + event->keyval == GDK_KP_Up) && + (event->state & GDK_MOD1_MASK)) // FIXME: Alt-Up doesn't seem to work! + on_go_up(); + return FALSE; +} + + +static void prepare_file_view() +{ + GtkCellRenderer *text_renderer, *icon_renderer; + GtkTreeViewColumn *column; + GtkTreeSelection *select; + PangoFontDescription *pfd; + + file_store = gtk_list_store_new(FILEVIEW_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); + + gtk_tree_view_set_model(GTK_TREE_VIEW(file_view), GTK_TREE_MODEL(file_store)); + + icon_renderer = gtk_cell_renderer_pixbuf_new(); + text_renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new(); + gtk_tree_view_column_pack_start(column, icon_renderer, FALSE); + gtk_tree_view_column_set_attributes(column, icon_renderer, "stock-id", FILEVIEW_COLUMN_ICON, NULL); + gtk_tree_view_column_pack_start(column, text_renderer, TRUE); + gtk_tree_view_column_set_attributes(column, text_renderer, "text", FILEVIEW_COLUMN_NAME, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(file_view), column); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(file_view), FALSE); + + gtk_tree_view_set_enable_search(GTK_TREE_VIEW(file_view), TRUE); + gtk_tree_view_set_search_column(GTK_TREE_VIEW(file_view), FILEVIEW_COLUMN_NAME); + + pfd = pango_font_description_from_string(geany_data->prefs->tagbar_font); + gtk_widget_modify_font(file_view, pfd); + pango_font_description_free(pfd); + + // selection handling + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(file_view)); + gtk_tree_selection_set_mode(select, GTK_SELECTION_MULTIPLE); + + g_signal_connect(G_OBJECT(file_view), "realize", G_CALLBACK(on_current_path), NULL); + g_signal_connect(G_OBJECT(file_view), "button-press-event", + G_CALLBACK(on_button_press), NULL); + g_signal_connect(G_OBJECT(file_view), "key-press-event", + G_CALLBACK(on_key_press), NULL); +} + + +void init(GeanyData *data) +{ + GtkWidget *scrollwin, *wid, *vbox, *toolbar; + GtkTooltips *tooltips = GTK_TOOLTIPS(support->lookup_widget( + geany_data->app->window, "tooltips")); + + file_view = gtk_tree_view_new(); + prepare_file_view(); + + vbox = gtk_vbox_new(FALSE, 0); + + toolbar = gtk_toolbar_new(); + gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_MENU); + + wid = (GtkWidget *) gtk_tool_button_new_from_stock(GTK_STOCK_GO_UP); + gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(wid), tooltips, + _("Up"), NULL); + g_signal_connect(G_OBJECT(wid), "clicked", G_CALLBACK(on_go_up), NULL); + gtk_container_add(GTK_CONTAINER(toolbar), wid); + + wid = (GtkWidget *) gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH); + gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(wid), tooltips, + _("Refresh"), NULL); + g_signal_connect(G_OBJECT(wid), "clicked", G_CALLBACK(refresh), NULL); + gtk_container_add(GTK_CONTAINER(toolbar), wid); + + wid = (GtkWidget *) gtk_tool_button_new_from_stock(GTK_STOCK_HOME); + gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(wid), tooltips, + _("Home"), NULL); + g_signal_connect(G_OBJECT(wid), "clicked", G_CALLBACK(on_go_home), NULL); + gtk_container_add(GTK_CONTAINER(toolbar), wid); + + wid = (GtkWidget *) gtk_tool_button_new_from_stock(GTK_STOCK_JUMP_TO); + gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(wid), tooltips, + _("Set path from document"), NULL); + g_signal_connect(G_OBJECT(wid), "clicked", G_CALLBACK(on_current_path), NULL); + gtk_container_add(GTK_CONTAINER(toolbar), wid); + + gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); + + path_entry = gtk_entry_new(); + gtk_editable_set_editable(GTK_EDITABLE(path_entry), FALSE); + gtk_box_pack_start(GTK_BOX(vbox), path_entry, FALSE, FALSE, 2); + + scrollwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy( + GTK_SCROLLED_WINDOW(scrollwin), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(scrollwin), file_view); + gtk_container_add(GTK_CONTAINER(vbox), scrollwin); + + gtk_widget_show_all(vbox); + gtk_notebook_append_page(GTK_NOTEBOOK(data->app->treeview_notebook), vbox, + gtk_label_new(_("Files"))); +} + + +void cleanup() +{ + gtk_widget_destroy(file_view); +}
Property changes on: trunk/plugins/filebrowser.c ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native
Modified: trunk/plugins/makefile.win32 =================================================================== --- trunk/plugins/makefile.win32 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/plugins/makefile.win32 2007-10-22 12:42:19 UTC (rev 1966) @@ -45,7 +45,8 @@ demoplugin.dll \ classbuilder.dll \ export.dll \ - svndiff.dll + svndiff.dll \ + filebrowser.dll
clean: -$(RM) deps.mak *.o *.dll
Modified: trunk/po/POTFILES.in =================================================================== --- trunk/po/POTFILES.in 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/po/POTFILES.in 2007-10-22 12:42:19 UTC (rev 1966) @@ -38,3 +38,4 @@ plugins/htmlchars.c plugins/export.c plugins/svndiff.c +plugins/filebrowser.c
Modified: trunk/src/interface.c =================================================================== --- trunk/src/interface.c 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/src/interface.c 2007-10-22 12:42:19 UTC (rev 1966) @@ -1211,7 +1211,7 @@ gtk_widget_show (treeview6); gtk_container_add (GTK_CONTAINER (scrolledwindow7), treeview6);
- label136 = gtk_label_new (_("Open files")); + label136 = gtk_label_new (_("Documents")); gtk_widget_show (label136); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook3), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook3), 1), label136);
@@ -2911,13 +2911,13 @@ gtk_tooltips_set_tip (tooltips, check_list_symbol, _("Toggle the symbol list on and off"), NULL); gtk_button_set_focus_on_click (GTK_BUTTON (check_list_symbol), FALSE);
- check_list_openfiles = gtk_check_button_new_with_mnemonic (_("Show open files list")); + check_list_openfiles = gtk_check_button_new_with_mnemonic (_("Show documents list")); gtk_widget_show (check_list_openfiles); gtk_box_pack_start (GTK_BOX (vbox11), check_list_openfiles, FALSE, FALSE, 0); - gtk_tooltips_set_tip (tooltips, check_list_openfiles, _("Toggle the open files list on and off"), NULL); + gtk_tooltips_set_tip (tooltips, check_list_openfiles, _("Toggle the documents list on and off"), NULL); gtk_button_set_focus_on_click (GTK_BUTTON (check_list_openfiles), FALSE);
- check_list_openfiles_fullpath = gtk_check_button_new_with_mnemonic (_("Show full path name in open files list")); + check_list_openfiles_fullpath = gtk_check_button_new_with_mnemonic (_("Show full path name in documents list")); gtk_widget_show (check_list_openfiles_fullpath); gtk_box_pack_start (GTK_BOX (vbox11), check_list_openfiles_fullpath, FALSE, FALSE, 0); gtk_button_set_focus_on_click (GTK_BUTTON (check_list_openfiles_fullpath), FALSE);
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/src/plugindata.h 2007-10-22 12:42:19 UTC (rev 1966) @@ -71,7 +71,7 @@
/* The API version should be incremented whenever any plugin data types below are * modified or appended to. */ -static const gint api_version = 25; +static const gint api_version = 26;
/* The ABI version should be incremented whenever existing fields in the plugin * data types below have to be changed or reordered. It should stay the same if fields @@ -119,6 +119,17 @@ }
+/* For geany_callbacks array - see top of file. */ +typedef struct GeanyCallback +{ + gchar *signal_name; + GCallback callback; + gboolean after; + gpointer user_data; +} +GeanyCallback; + + typedef enum { PLUGIN_IS_DOCUMENT_SENSITIVE = 1 << 0 // if menu_item should be disabled when there are no documents @@ -159,6 +170,8 @@ struct DialogFuncs *dialogs; struct MsgWinFuncs *msgwindow; struct EncodingFuncs *encoding; + struct KeybindingFuncs *keybindings; + struct TagManagerFuncs *tm; } GeanyData;
@@ -289,13 +302,18 @@ EncodingFuncs;
-typedef struct GeanyCallback +typedef struct KeybindingFuncs { - gchar *signal_name; - GCallback callback; - gboolean after; - gpointer user_data; + /* See GeanyKeyCommand enum for cmd_id. */ + void (*send_command) (gint cmd_id); } -GeanyCallback; +KeybindingFuncs;
+ +typedef struct TagManagerFuncs +{ + gchar* (*get_real_path) (const gchar *file_name); +} +TagManagerFuncs; + #endif
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/src/plugins.c 2007-10-22 12:42:19 UTC (rev 1966) @@ -50,7 +50,10 @@ #include "build.h" #include "encodings.h"
+void keybindings_cmd(gint cmd_id); // don't require keybindings.h enum in plugindata.h
+ + #ifdef G_OS_WIN32 # define PLUGIN_EXT "dll" #else @@ -184,7 +187,15 @@ &encodings_convert_to_utf8_from_charset };
+static KeybindingFuncs keybindings_funcs = { + &keybindings_cmd +};
+static TagManagerFuncs tagmanager_funcs = { + &tm_get_real_path +}; + + static GeanyData geany_data = { NULL, NULL, @@ -202,7 +213,9 @@ &support_funcs, &dialog_funcs, &msgwin_funcs, - &encoding_funcs + &encoding_funcs, + &keybindings_funcs, + &tagmanager_funcs, };
Modified: trunk/src/treeviews.c =================================================================== --- trunk/src/treeviews.c 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/src/treeviews.c 2007-10-22 12:42:19 UTC (rev 1966) @@ -241,7 +241,7 @@ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Open files"), renderer, + column = gtk_tree_view_column_new_with_attributes(_("Documents"), renderer, "text", 0, "foreground-gdk", 2, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tv.tree_openfiles), column); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tv.tree_openfiles), FALSE);
Modified: trunk/src/utils.c =================================================================== --- trunk/src/utils.c 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/src/utils.c 2007-10-22 12:42:19 UTC (rev 1966) @@ -1564,7 +1564,8 @@ }
-/* Gets a sorted list of files in the specified directory. +/* Gets a sorted list of files from the specified directory. + * Locale encoding is expected for path and used for the file list. * The list and the data in the list should be freed after use. * Returns: The list or NULL if no files found. * length will point to the number of non-NULL data items in the list, unless NULL.
Modified: trunk/src/vte.c =================================================================== --- trunk/src/vte.c 2007-10-22 12:31:26 UTC (rev 1965) +++ trunk/src/vte.c 2007-10-22 12:42:19 UTC (rev 1966) @@ -411,7 +411,7 @@ gtk_container_add(GTK_CONTAINER(menu), item); g_signal_connect((gpointer)item, "activate", G_CALLBACK(vte_popup_menu_clicked), GINT_TO_POINTER(POPUP_PASTE));
- item = gtk_image_menu_item_new_with_label("Change current working directory"); + item = gtk_image_menu_item_new_with_label(_("Set path from document")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); g_signal_connect((gpointer)item, "activate", G_CALLBACK(vte_popup_menu_clicked), GINT_TO_POINTER(POPUP_CHANGEPATH));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.