SF.net SVN: geany: [456] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Sat Jun 17 21:08:56 UTC 2006
Revision: 456
Author: ntrel
Date: 2006-06-17 14:08:47 -0700 (Sat, 17 Jun 2006)
ViewCVS: http://svn.sourceforge.net/geany/?rev=456&view=rev
Log Message:
-----------
Add keybindings for Find Usage, Go to definition/declaration, based on the current cursor position. Also ensure null termination in utils_find_current_word
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/keybindings.c
trunk/src/keybindings.h
trunk/src/utils.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-06-17 17:05:41 UTC (rev 455)
+++ trunk/ChangeLog 2006-06-17 21:08:47 UTC (rev 456)
@@ -4,9 +4,13 @@
doc/geany.docbook: Made Duplicate Line command duplicate selection
if present.
* src/highlighting.c: Fixed styling for unmatched braces.
- * src/keybindings.c, src/keybindings.h, doc/geany.docbook:
- Set default keybindings for switch page left/right; also group
- toggle sidebar keybinding with toggle messages.
+ * src/keybindings.h, doc/geany.docbook:
+ Group toggle sidebar keybinding with toggle messages.
+ * src/keybindings.c: Set keyboard shortcuts for switching tab pages.
+ * src/keybindings.c, src/keybindings.h:
+ Add keybindings for Find Usage, Go to definition/declaration,
+ based on the current cursor position.
+ * src/utils.c: Ensure null termination in utils_find_current_word.
2006-06-16 Enrico Troeger <enrico.troeger at uvena.de>
Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c 2006-06-17 17:05:41 UTC (rev 455)
+++ trunk/src/keybindings.c 2006-06-17 21:08:47 UTC (rev 456)
@@ -84,7 +84,11 @@
static void cb_func_edit_calltip(void);
static void cb_func_edit_macrolist(void);
static void cb_func_edit_suppresscompletion(void);
+static void cb_func_popup_findusage(void);
+static void cb_func_popup_gototagdefinition(void);
+static void cb_func_popup_gototagdeclaration(void);
+void keybindings_call_popup_item(int menuitemkey);
void keybindings_add_accels();
@@ -139,6 +143,12 @@
keys[GEANY_KEYS_EDIT_CALLTIP] = fill(cb_func_edit_calltip, GDK_space, GDK_MOD1_MASK, "edit_calltip", _("Show calltip"));
keys[GEANY_KEYS_EDIT_MACROLIST] = fill(cb_func_edit_macrolist, GDK_Return, GDK_CONTROL_MASK, "edit_macrolist", _("Show macro list"));
keys[GEANY_KEYS_EDIT_SUPPRESSCOMPLETION] = fill(cb_func_edit_suppresscompletion, GDK_space, GDK_SHIFT_MASK, "edit_suppresscompletion", _("Suppress auto completion"));
+ keys[GEANY_KEYS_POPUP_FINDUSAGE] = fill(cb_func_popup_findusage,
+ 0, 0, "popup_findusage", _("Find Usage"));
+ keys[GEANY_KEYS_POPUP_GOTOTAGDEFINITION] = fill(cb_func_popup_gototagdefinition,
+ 0, 0, "popup_gototagdefinition", _("Go to tag definition"));
+ keys[GEANY_KEYS_POPUP_GOTOTAGDECLARATION] = fill(cb_func_popup_gototagdeclaration,
+ 0, 0, "popup_gototagdeclaration", _("Go to tag declaration"));
// now load user defined keys
if (g_key_file_load_from_file(config, configfile, G_KEY_FILE_KEEP_COMMENTS, NULL))
@@ -170,6 +180,13 @@
"activate", accel_group, keys[(gkey)]->key, keys[(gkey)]->mods, \
GTK_ACCEL_VISIBLE)
+#define GEANY_ADD_POPUP_ACCEL(gkey, wid) \
+ if (keys[(gkey)]->key != 0) \
+ gtk_widget_add_accelerator( \
+ lookup_widget(app->popup_menu, G_STRINGIFY(wid)), \
+ "activate", accel_group, keys[(gkey)]->key, keys[(gkey)]->mods, \
+ GTK_ACCEL_VISIBLE)
+
void keybindings_add_accels()
{
GtkAccelGroup *accel_group = gtk_accel_group_new();
@@ -192,6 +209,10 @@
GEANY_ADD_ACCEL(GEANY_KEYS_MENU_FOLDALL, menu_fold_all1);
GEANY_ADD_ACCEL(GEANY_KEYS_MENU_UNFOLDALL, menu_unfold_all1);
+ GEANY_ADD_POPUP_ACCEL(GEANY_KEYS_POPUP_FINDUSAGE, find_usage1);
+ GEANY_ADD_POPUP_ACCEL(GEANY_KEYS_POPUP_GOTOTAGDEFINITION, goto_tag_definition1);
+ GEANY_ADD_POPUP_ACCEL(GEANY_KEYS_POPUP_GOTOTAGDECLARATION, goto_tag_declaration1);
+
// the build menu items are set if the build menus are created
gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group);
@@ -453,6 +474,54 @@
document_update_tag_list(idx, TRUE);
}
+
+static void cb_func_popup_findusage(void)
+{
+ keybindings_call_popup_item(GEANY_KEYS_POPUP_FINDUSAGE);
+}
+
+
+static void cb_func_popup_gototagdefinition(void)
+{
+ keybindings_call_popup_item(GEANY_KEYS_POPUP_GOTOTAGDEFINITION);
+}
+
+
+static void cb_func_popup_gototagdeclaration(void)
+{
+ keybindings_call_popup_item(GEANY_KEYS_POPUP_GOTOTAGDECLARATION);
+}
+
+
+void keybindings_call_popup_item(int menuitemkey)
+{
+ gint idx = document_get_cur_idx();
+ gint pos = sci_get_current_position(doc_list[idx].sci);
+ gchar current_word[128];
+
+ utils_find_current_word(doc_list[idx].sci, pos,
+ current_word, sizeof current_word);
+
+ if (*current_word == 0)
+ utils_beep();
+ else
+ switch (menuitemkey)
+ {
+ case GEANY_KEYS_POPUP_FINDUSAGE:
+ on_find_usage1_activate(NULL, NULL);
+ break;
+ case GEANY_KEYS_POPUP_GOTOTAGDEFINITION:
+ on_goto_tag_activate(GTK_MENU_ITEM(lookup_widget(app->popup_menu,
+ "goto_tag_definition1")), NULL);
+ break;
+ case GEANY_KEYS_POPUP_GOTOTAGDECLARATION:
+ on_goto_tag_activate(GTK_MENU_ITEM(lookup_widget(app->popup_menu,
+ "goto_tag_declaration1")), NULL);
+ break;
+ }
+}
+
+
static void cb_func_switch_editor(void)
{
gint idx = document_get_cur_idx();
Modified: trunk/src/keybindings.h
===================================================================
--- trunk/src/keybindings.h 2006-06-17 17:05:41 UTC (rev 455)
+++ trunk/src/keybindings.h 2006-06-17 21:08:47 UTC (rev 456)
@@ -82,6 +82,9 @@
GEANY_KEYS_EDIT_CALLTIP,
GEANY_KEYS_EDIT_MACROLIST,
GEANY_KEYS_EDIT_SUPPRESSCOMPLETION,
+ GEANY_KEYS_POPUP_FINDUSAGE,
+ GEANY_KEYS_POPUP_GOTOTAGDEFINITION,
+ GEANY_KEYS_POPUP_GOTOTAGDECLARATION,
GEANY_MAX_KEYS
};
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2006-06-17 17:05:41 UTC (rev 455)
+++ trunk/src/utils.c 2006-06-17 21:08:47 UTC (rev 456)
@@ -1066,7 +1066,7 @@
chunk[endword] = '\0';
- strncpy(word, chunk + startword, MIN(endword - startword + 1, wordlen));
+ g_strlcpy(word, chunk + startword, wordlen); //ensure null terminated
g_free(chunk);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list