Merge branch 'kugel-/linkage-cleanup_rebase-for-merge'

This merges PR#429 with only small history cleanup (no code changes),
and ABI bump.

Closes #355, #358 and #429.
This commit is contained in:
Colomban Wendling 2015-04-10 16:54:30 +02:00
commit f3078ebbc6
53 changed files with 2228 additions and 3186 deletions

1
.gitignore vendored
View File

@ -92,6 +92,7 @@ Makefile.in
# /src/
#-----------------------------------------------------------------------
/src/geany
/src/signallist.i
#-----------------------------------------------------------------------
# /doc/

View File

@ -24,6 +24,7 @@ fi
AC_USE_SYSTEM_EXTENSIONS
m4_ifdef([AM_PROG_AR],[AM_PROG_AR])
LT_INIT
AC_PROG_CC
AC_PROG_CC_C99
AM_PROG_CC_C_O
@ -74,7 +75,7 @@ AM_CONDITIONAL([GTK3], [test "x$gtk_package" = "xgtk+-3.0"])
# GTK/GLib/GIO checks
gtk_modules="$gtk_package >= $gtk_min_version glib-2.0 >= 2.20"
gtk_modules_private="gio-2.0 >= 2.20 gmodule-2.0"
gtk_modules_private="gio-2.0 >= 2.20 gmodule-no-export-2.0"
PKG_CHECK_MODULES([GTK], [$gtk_modules $gtk_modules_private])
AC_SUBST([DEPENDENCIES], [$gtk_modules])
AC_SUBST([GTK_CFLAGS])
@ -122,6 +123,9 @@ AC_SUBST([pkgdatadir])
GEANY_CHECK_DOCUTILS
GEANY_CHECK_DOXYGEN
# libgeany
GEANY_LIB_INIT
# Output
AC_CONFIG_FILES([
Makefile

View File

@ -775,7 +775,6 @@ WARN_LOGFILE =
INPUT = @top_srcdir@/src/ \
@top_srcdir@/doc/ \
@top_srcdir@/plugins/geanyplugin.h \
@top_srcdir@/plugins/geanyfunctions.h \
@top_srcdir@/tagmanager/src/tm_source_file.c \
@top_srcdir@/tagmanager/src/tm_source_file.h \
@top_srcdir@/tagmanager/src/tm_workspace.c \

View File

@ -96,7 +96,6 @@ doxygen_sources = \
$(srcdir)/*.dox \
$(top_srcdir)/src/*.[ch] \
$(top_srcdir)/plugins/geanyplugin.h \
$(top_srcdir)/plugins/geanyfunctions.h \
$(top_srcdir)/tagmanager/src/tm_source_file.[ch] \
$(top_srcdir)/tagmanager/src/tm_workspace.[ch]

View File

@ -187,14 +187,12 @@ so there is no need to include @a gtk/gtk.h yourself.
@note
@a plugindata.h contains the biggest part of the plugin API and provides some basic macros.
@a geanyfunctions.h provides some macros for convenient access to plugin API functions.
Then you should define three basic variables which will give access to data fields and
functions provided by the plugin API.
Then you should define two basic variables which will give access to data fields
provided by the plugin API.
@code
GeanyPlugin *geany_plugin;
GeanyData *geany_data;
GeanyFunctions *geany_functions;
@endcode
Now you can go on and write your first lines for your new plugin. As mentioned before,
@ -363,7 +361,6 @@ Once this is done, your first plugin is ready. Congratulations!
GeanyPlugin *geany_plugin;
GeanyData *geany_data;
GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(211)

View File

@ -10,5 +10,5 @@ Name: Geany
Description: A fast and lightweight IDE using GTK2
Requires: @DEPENDENCIES@
Version: @VERSION@
Libs: -L${libdir}
Libs: -L${libdir} -lgeany
Cflags: -DGTK -I${includedir}/geany -I${includedir}/geany/tagmanager -I${includedir}/geany/scintilla

58
m4/geany-lib.m4 Normal file
View File

@ -0,0 +1,58 @@
dnl checks whether the compiler supports GCC4-style visibility
AC_DEFUN([GCC4_VISIBILITY],
[
have_gcc4_visibility=no
AC_MSG_CHECKING([whether compiler supports GCC4-style visibility])
gcc_visibility_backup_cflags=$CFLAGS
CFLAGS=-fvisibility=hidden
AC_LINK_IFELSE([AC_LANG_SOURCE([[__attribute__((visibility("default")))
int main(int argc, char **argv) { return 0; }]])],
[have_gcc4_visibility=yes])
AC_MSG_RESULT([$have_gcc4_visibility])
CFLAGS="${gcc_visibility_backup_cflags}"
])
dnl Checks and fills LIBGEANY_EXPORT_CFLAGS
AC_DEFUN([GEANY_EXPORT],
[
AC_REQUIRE([GEANY_CHECK_MINGW])
AC_REQUIRE([GCC4_VISIBILITY])
dnl FIXME: better way to detect Windows?
AM_COND_IF([MINGW], [win32=yes], [win32=false])
export_CFLAGS=
AS_IF([test x$win32 = xyes],
[export_CFLAGS='-DGEANY_EXPORT_SYMBOL="__declspec(dllexport)"'],
[test x$have_gcc4_visibility = xyes],
[export_CFLAGS='-fvisibility=hidden -DGEANY_EXPORT_SYMBOL="__attribute__((visibility(\"default\")))"'],
[dnl GEANY_EXPORT_SYMBOL expands to nothing
export_CFLAGS='-DGEANY_EXPORT_SYMBOL'])
LIBGEANY_EXPORT_CFLAGS="${export_CFLAGS} -DGEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL"
AC_SUBST([LIBGEANY_EXPORT_CFLAGS])
])
AC_DEFUN([GEANY_LIB_INIT],
[
AC_REQUIRE([GEANY_EXPORT])
dnl In the future, if we want to use libtool/library versioning, we can
dnl set these variables accordingly. For now its the same as if not specified (0:0:0)
libgeany_current=0
libgeany_revision=0
libgeany_age=0
LIBGEANY_CFLAGS="${LIBGEANY_EXPORT_CFLAGS}"
LIBGEANY_LDFLAGS="-version-info ${libgeany_current}:${libgeany_revision}:${libgeany_age}"
AC_SUBST([LIBGEANY_CFLAGS])
AC_SUBST([LIBGEANY_LDFLAGS])
dnl Check for utilities needed to do codegen
AC_PATH_PROG([SORT], [sort], [
AC_MSG_ERROR([The 'sort' utility is required, is it installed?])])
AC_PATH_PROG([UNIQ], [uniq], [
AC_MSG_ERROR([The 'uniq' utility is required, is it installed?])])
])

View File

@ -1,8 +1,7 @@
# Adapted from Pidgin's plugins/Makefile.am, thanks
EXTRA_DIST = \
makefile.win32 \
genapi.py
makefile.win32
if MINGW
plugindir = $(libdir)
@ -12,15 +11,8 @@ endif
plugins_includedir = $(includedir)/geany
plugins_include_HEADERS = \
geanyplugin.h \
geanyfunctions.h
# systems without python should continue to build OK
$(srcdir)/geanyfunctions.h: $(srcdir)/genapi.py $(srcdir)/../src/plugins.c
(cd "$(srcdir)" && python genapi.py ../src/plugins.c) || true
all: geanyfunctions.h
geanyfunctions.h \
geanyplugin.h
demoplugin_la_LDFLAGS = -module -avoid-version -no-undefined
classbuilder_la_LDFLAGS = -module -avoid-version -no-undefined
@ -31,7 +23,6 @@ filebrowser_la_LDFLAGS = -module -avoid-version -no-undefined
splitwindow_la_LDFLAGS = -module -avoid-version -no-undefined
if PLUGINS
# Plugins to be installed
plugin_LTLIBRARIES = \
classbuilder.la \
@ -61,13 +52,13 @@ saveactions_la_CFLAGS = -DG_LOG_DOMAIN=\""SaveActions"\"
filebrowser_la_CFLAGS = -DG_LOG_DOMAIN=\""FileBrowser"\"
splitwindow_la_CFLAGS = -DG_LOG_DOMAIN=\""SplitWindow"\"
demoplugin_la_LIBADD = $(GTK_LIBS)
classbuilder_la_LIBADD = $(GTK_LIBS)
htmlchars_la_LIBADD = $(GTK_LIBS)
export_la_LIBADD = $(GTK_LIBS) -lm
saveactions_la_LIBADD = $(GTK_LIBS)
filebrowser_la_LIBADD = $(GTK_LIBS)
splitwindow_la_LIBADD = $(GTK_LIBS)
demoplugin_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
classbuilder_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
htmlchars_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
export_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS) -lm
saveactions_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
filebrowser_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
splitwindow_la_LIBADD = $(top_builddir)/src/libgeany.la $(GTK_LIBS)
endif # PLUGINS

View File

@ -1,448 +1,28 @@
/* This file is generated automatically by genapi.py - do not edit. */
/** @file geanyfunctions.h @ref geany_functions wrappers.
* This allows the use of normal API function names in plugins by defining macros.
/*
* geanyfunctions.h - this file is part of Geany, a fast and lightweight IDE
*
* E.g.:@code
* #define plugin_add_toolbar_item \
* geany_functions->p_plugin->plugin_add_toolbar_item @endcode
* Copyright 2014 Matthew Brush <mbrush@codebrainz.ca>
*
* You need to declare the @ref geany_functions symbol yourself.
* 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.
*
* Note: This must be included after all other API headers to prevent conflicts with
* other header's function prototypes - this is done for you when using geanyplugin.h.
* 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.
*/
/* This file exists purely for backwards compatibility. */
#ifndef GEANY_FUNCTIONS_H
#define GEANY_FUNCTIONS_H
#define GEANY_FUNCTIONS_H 1
#define plugin_add_toolbar_item \
geany_functions->p_plugin->plugin_add_toolbar_item
#define plugin_module_make_resident \
geany_functions->p_plugin->plugin_module_make_resident
#define plugin_signal_connect \
geany_functions->p_plugin->plugin_signal_connect
#define plugin_set_key_group \
geany_functions->p_plugin->plugin_set_key_group
#define plugin_show_configure \
geany_functions->p_plugin->plugin_show_configure
#define plugin_timeout_add \
geany_functions->p_plugin->plugin_timeout_add
#define plugin_timeout_add_seconds \
geany_functions->p_plugin->plugin_timeout_add_seconds
#define plugin_idle_add \
geany_functions->p_plugin->plugin_idle_add
#define plugin_builder_connect_signals \
geany_functions->p_plugin->plugin_builder_connect_signals
#define document_new_file \
geany_functions->p_document->document_new_file
#define document_get_current \
geany_functions->p_document->document_get_current
#define document_get_from_page \
geany_functions->p_document->document_get_from_page
#define document_find_by_filename \
geany_functions->p_document->document_find_by_filename
#define document_find_by_real_path \
geany_functions->p_document->document_find_by_real_path
#define document_save_file \
geany_functions->p_document->document_save_file
#define document_open_file \
geany_functions->p_document->document_open_file
#define document_open_files \
geany_functions->p_document->document_open_files
#define document_remove_page \
geany_functions->p_document->document_remove_page
#define document_reload_force \
geany_functions->p_document->document_reload_force
#define document_set_encoding \
geany_functions->p_document->document_set_encoding
#define document_set_text_changed \
geany_functions->p_document->document_set_text_changed
#define document_set_filetype \
geany_functions->p_document->document_set_filetype
#define document_close \
geany_functions->p_document->document_close
#define document_index \
geany_functions->p_document->document_index
#define document_save_file_as \
geany_functions->p_document->document_save_file_as
#define document_rename_file \
geany_functions->p_document->document_rename_file
#define document_get_status_color \
geany_functions->p_document->document_get_status_color
#define document_get_basename_for_display \
geany_functions->p_document->document_get_basename_for_display
#define document_get_notebook_page \
geany_functions->p_document->document_get_notebook_page
#define document_compare_by_display_name \
geany_functions->p_document->document_compare_by_display_name
#define document_compare_by_tab_order \
geany_functions->p_document->document_compare_by_tab_order
#define document_compare_by_tab_order_reverse \
geany_functions->p_document->document_compare_by_tab_order_reverse
#define document_find_by_id \
geany_functions->p_document->document_find_by_id
#define editor_get_indent_prefs \
geany_functions->p_editor->editor_get_indent_prefs
#define editor_create_widget \
geany_functions->p_editor->editor_create_widget
#define editor_indicator_set_on_range \
geany_functions->p_editor->editor_indicator_set_on_range
#define editor_indicator_set_on_line \
geany_functions->p_editor->editor_indicator_set_on_line
#define editor_indicator_clear \
geany_functions->p_editor->editor_indicator_clear
#define editor_set_indent_type \
geany_functions->p_editor->editor_set_indent_type
#define editor_get_word_at_pos \
geany_functions->p_editor->editor_get_word_at_pos
#define editor_get_eol_char_name \
geany_functions->p_editor->editor_get_eol_char_name
#define editor_get_eol_char_len \
geany_functions->p_editor->editor_get_eol_char_len
#define editor_get_eol_char \
geany_functions->p_editor->editor_get_eol_char
#define editor_insert_text_block \
geany_functions->p_editor->editor_insert_text_block
#define editor_get_eol_char_mode \
geany_functions->p_editor->editor_get_eol_char_mode
#define editor_goto_pos \
geany_functions->p_editor->editor_goto_pos
#define editor_find_snippet \
geany_functions->p_editor->editor_find_snippet
#define editor_insert_snippet \
geany_functions->p_editor->editor_insert_snippet
#define scintilla_send_message \
geany_functions->p_scintilla->scintilla_send_message
#define scintilla_new \
geany_functions->p_scintilla->scintilla_new
#define sci_send_command \
geany_functions->p_sci->sci_send_command
#define sci_start_undo_action \
geany_functions->p_sci->sci_start_undo_action
#define sci_end_undo_action \
geany_functions->p_sci->sci_end_undo_action
#define sci_set_text \
geany_functions->p_sci->sci_set_text
#define sci_insert_text \
geany_functions->p_sci->sci_insert_text
#define sci_get_text \
geany_functions->p_sci->sci_get_text
#define sci_get_length \
geany_functions->p_sci->sci_get_length
#define sci_get_current_position \
geany_functions->p_sci->sci_get_current_position
#define sci_set_current_position \
geany_functions->p_sci->sci_set_current_position
#define sci_get_col_from_position \
geany_functions->p_sci->sci_get_col_from_position
#define sci_get_line_from_position \
geany_functions->p_sci->sci_get_line_from_position
#define sci_get_position_from_line \
geany_functions->p_sci->sci_get_position_from_line
#define sci_replace_sel \
geany_functions->p_sci->sci_replace_sel
#define sci_get_selected_text \
geany_functions->p_sci->sci_get_selected_text
#define sci_get_selected_text_length \
geany_functions->p_sci->sci_get_selected_text_length
#define sci_get_selection_start \
geany_functions->p_sci->sci_get_selection_start
#define sci_get_selection_end \
geany_functions->p_sci->sci_get_selection_end
#define sci_get_selection_mode \
geany_functions->p_sci->sci_get_selection_mode
#define sci_set_selection_mode \
geany_functions->p_sci->sci_set_selection_mode
#define sci_set_selection_start \
geany_functions->p_sci->sci_set_selection_start
#define sci_set_selection_end \
geany_functions->p_sci->sci_set_selection_end
#define sci_get_text_range \
geany_functions->p_sci->sci_get_text_range
#define sci_get_line \
geany_functions->p_sci->sci_get_line
#define sci_get_line_length \
geany_functions->p_sci->sci_get_line_length
#define sci_get_line_count \
geany_functions->p_sci->sci_get_line_count
#define sci_get_line_is_visible \
geany_functions->p_sci->sci_get_line_is_visible
#define sci_ensure_line_is_visible \
geany_functions->p_sci->sci_ensure_line_is_visible
#define sci_scroll_caret \
geany_functions->p_sci->sci_scroll_caret
#define sci_find_matching_brace \
geany_functions->p_sci->sci_find_matching_brace
#define sci_get_style_at \
geany_functions->p_sci->sci_get_style_at
#define sci_get_char_at \
geany_functions->p_sci->sci_get_char_at
#define sci_get_current_line \
geany_functions->p_sci->sci_get_current_line
#define sci_has_selection \
geany_functions->p_sci->sci_has_selection
#define sci_get_tab_width \
geany_functions->p_sci->sci_get_tab_width
#define sci_indicator_clear \
geany_functions->p_sci->sci_indicator_clear
#define sci_indicator_set \
geany_functions->p_sci->sci_indicator_set
#define sci_get_contents \
geany_functions->p_sci->sci_get_contents
#define sci_get_contents_range \
geany_functions->p_sci->sci_get_contents_range
#define sci_get_selection_contents \
geany_functions->p_sci->sci_get_selection_contents
#define sci_set_font \
geany_functions->p_sci->sci_set_font
#define sci_get_line_end_position \
geany_functions->p_sci->sci_get_line_end_position
#define sci_set_target_start \
geany_functions->p_sci->sci_set_target_start
#define sci_set_target_end \
geany_functions->p_sci->sci_set_target_end
#define sci_replace_target \
geany_functions->p_sci->sci_replace_target
#define sci_set_marker_at_line \
geany_functions->p_sci->sci_set_marker_at_line
#define sci_delete_marker_at_line \
geany_functions->p_sci->sci_delete_marker_at_line
#define sci_is_marker_set_at_line \
geany_functions->p_sci->sci_is_marker_set_at_line
#define sci_goto_line \
geany_functions->p_sci->sci_goto_line
#define sci_find_text \
geany_functions->p_sci->sci_find_text
#define sci_set_line_indentation \
geany_functions->p_sci->sci_set_line_indentation
#define sci_get_line_indentation \
geany_functions->p_sci->sci_get_line_indentation
#define sci_get_lexer \
geany_functions->p_sci->sci_get_lexer
#define templates_get_template_fileheader \
geany_functions->p_templates->templates_get_template_fileheader
#define utils_str_equal \
geany_functions->p_utils->utils_str_equal
#define utils_string_replace_all \
geany_functions->p_utils->utils_string_replace_all
#define utils_get_file_list \
geany_functions->p_utils->utils_get_file_list
#define utils_write_file \
geany_functions->p_utils->utils_write_file
#define utils_get_locale_from_utf8 \
geany_functions->p_utils->utils_get_locale_from_utf8
#define utils_get_utf8_from_locale \
geany_functions->p_utils->utils_get_utf8_from_locale
#define utils_remove_ext_from_filename \
geany_functions->p_utils->utils_remove_ext_from_filename
#define utils_mkdir \
geany_functions->p_utils->utils_mkdir
#define utils_get_setting_boolean \
geany_functions->p_utils->utils_get_setting_boolean
#define utils_get_setting_integer \
geany_functions->p_utils->utils_get_setting_integer
#define utils_get_setting_string \
geany_functions->p_utils->utils_get_setting_string
#define utils_spawn_sync \
geany_functions->p_utils->utils_spawn_sync
#define utils_spawn_async \
geany_functions->p_utils->utils_spawn_async
#define utils_str_casecmp \
geany_functions->p_utils->utils_str_casecmp
#define utils_get_date_time \
geany_functions->p_utils->utils_get_date_time
#define utils_open_browser \
geany_functions->p_utils->utils_open_browser
#define utils_string_replace_first \
geany_functions->p_utils->utils_string_replace_first
#define utils_str_middle_truncate \
geany_functions->p_utils->utils_str_middle_truncate
#define utils_str_remove_chars \
geany_functions->p_utils->utils_str_remove_chars
#define utils_get_file_list_full \
geany_functions->p_utils->utils_get_file_list_full
#define utils_copy_environment \
geany_functions->p_utils->utils_copy_environment
#define utils_find_open_xml_tag \
geany_functions->p_utils->utils_find_open_xml_tag
#define utils_find_open_xml_tag_pos \
geany_functions->p_utils->utils_find_open_xml_tag_pos
#define ui_dialog_vbox_new \
geany_functions->p_ui->ui_dialog_vbox_new
#define ui_frame_new_with_alignment \
geany_functions->p_ui->ui_frame_new_with_alignment
#define ui_set_statusbar \
geany_functions->p_ui->ui_set_statusbar
#define ui_table_add_row \
geany_functions->p_ui->ui_table_add_row
#define ui_path_box_new \
geany_functions->p_ui->ui_path_box_new
#define ui_button_new_with_image \
geany_functions->p_ui->ui_button_new_with_image
#define ui_add_document_sensitive \
geany_functions->p_ui->ui_add_document_sensitive
#define ui_widget_set_tooltip_text \
geany_functions->p_ui->ui_widget_set_tooltip_text
#define ui_image_menu_item_new \
geany_functions->p_ui->ui_image_menu_item_new
#define ui_lookup_widget \
geany_functions->p_ui->ui_lookup_widget
#define ui_progress_bar_start \
geany_functions->p_ui->ui_progress_bar_start
#define ui_progress_bar_stop \
geany_functions->p_ui->ui_progress_bar_stop
#define ui_entry_add_clear_icon \
geany_functions->p_ui->ui_entry_add_clear_icon
#define ui_menu_add_document_items \
geany_functions->p_ui->ui_menu_add_document_items
#define ui_widget_modify_font_from_string \
geany_functions->p_ui->ui_widget_modify_font_from_string
#define ui_is_keyval_enter_or_return \
geany_functions->p_ui->ui_is_keyval_enter_or_return
#define ui_get_gtk_settings_integer \
geany_functions->p_ui->ui_get_gtk_settings_integer
#define ui_combo_box_add_to_history \
geany_functions->p_ui->ui_combo_box_add_to_history
#define ui_menu_add_document_items_sorted \
geany_functions->p_ui->ui_menu_add_document_items_sorted
#define ui_lookup_stock_label \
geany_functions->p_ui->ui_lookup_stock_label
#define ui_tree_view_set_tooltip_text_column \
geany_functions->p_ui->ui_tree_view_set_tooltip_text_column
#define dialogs_show_question \
geany_functions->p_dialogs->dialogs_show_question
#define dialogs_show_msgbox \
geany_functions->p_dialogs->dialogs_show_msgbox
#define dialogs_show_save_as \
geany_functions->p_dialogs->dialogs_show_save_as
#define dialogs_show_input_numeric \
geany_functions->p_dialogs->dialogs_show_input_numeric
#define dialogs_show_input \
geany_functions->p_dialogs->dialogs_show_input
#define msgwin_status_add \
geany_functions->p_msgwin->msgwin_status_add
#define msgwin_compiler_add \
geany_functions->p_msgwin->msgwin_compiler_add
#define msgwin_msg_add \
geany_functions->p_msgwin->msgwin_msg_add
#define msgwin_clear_tab \
geany_functions->p_msgwin->msgwin_clear_tab
#define msgwin_switch_tab \
geany_functions->p_msgwin->msgwin_switch_tab
#define msgwin_set_messages_dir \
geany_functions->p_msgwin->msgwin_set_messages_dir
#define encodings_convert_to_utf8 \
geany_functions->p_encodings->encodings_convert_to_utf8
#define encodings_convert_to_utf8_from_charset \
geany_functions->p_encodings->encodings_convert_to_utf8_from_charset
#define encodings_get_charset_from_index \
geany_functions->p_encodings->encodings_get_charset_from_index
#define keybindings_send_command \
geany_functions->p_keybindings->keybindings_send_command
#define keybindings_set_item \
geany_functions->p_keybindings->keybindings_set_item
#define keybindings_get_item \
geany_functions->p_keybindings->keybindings_get_item
#define keybindings_get_modifiers \
geany_functions->p_keybindings->keybindings_get_modifiers
#define tm_get_real_path \
geany_functions->p_tm->tm_get_real_path
#define tm_source_file_new \
geany_functions->p_tm->tm_source_file_new
#define tm_source_file_free \
geany_functions->p_tm->tm_source_file_free
#define tm_workspace_add_source_file \
geany_functions->p_tm->tm_workspace_add_source_file
#define tm_workspace_remove_source_file \
geany_functions->p_tm->tm_workspace_remove_source_file
#define tm_workspace_add_source_files \
geany_functions->p_tm->tm_workspace_add_source_files
#define tm_workspace_remove_source_files \
geany_functions->p_tm->tm_workspace_remove_source_files
#define search_show_find_in_files_dialog \
geany_functions->p_search->search_show_find_in_files_dialog
#define highlighting_get_style \
geany_functions->p_highlighting->highlighting_get_style
#define highlighting_set_styles \
geany_functions->p_highlighting->highlighting_set_styles
#define highlighting_is_string_style \
geany_functions->p_highlighting->highlighting_is_string_style
#define highlighting_is_comment_style \
geany_functions->p_highlighting->highlighting_is_comment_style
#define highlighting_is_code_style \
geany_functions->p_highlighting->highlighting_is_code_style
#define filetypes_detect_from_file \
geany_functions->p_filetypes->filetypes_detect_from_file
#define filetypes_lookup_by_name \
geany_functions->p_filetypes->filetypes_lookup_by_name
#define filetypes_index \
geany_functions->p_filetypes->filetypes_index
#define filetypes_get_display_name \
geany_functions->p_filetypes->filetypes_get_display_name
#define filetypes_get_sorted_by_name \
geany_functions->p_filetypes->filetypes_get_sorted_by_name
#define navqueue_goto_line \
geany_functions->p_navqueue->navqueue_goto_line
#define main_reload_configuration \
geany_functions->p_main->main_reload_configuration
#define main_locale_init \
geany_functions->p_main->main_locale_init
#define main_is_realized \
geany_functions->p_main->main_is_realized
#define stash_group_new \
geany_functions->p_stash->stash_group_new
#define stash_group_add_boolean \
geany_functions->p_stash->stash_group_add_boolean
#define stash_group_add_integer \
geany_functions->p_stash->stash_group_add_integer
#define stash_group_add_string \
geany_functions->p_stash->stash_group_add_string
#define stash_group_add_string_vector \
geany_functions->p_stash->stash_group_add_string_vector
#define stash_group_load_from_key_file \
geany_functions->p_stash->stash_group_load_from_key_file
#define stash_group_save_to_key_file \
geany_functions->p_stash->stash_group_save_to_key_file
#define stash_group_free \
geany_functions->p_stash->stash_group_free
#define stash_group_load_from_file \
geany_functions->p_stash->stash_group_load_from_file
#define stash_group_save_to_file \
geany_functions->p_stash->stash_group_save_to_file
#define stash_group_add_toggle_button \
geany_functions->p_stash->stash_group_add_toggle_button
#define stash_group_add_radio_buttons \
geany_functions->p_stash->stash_group_add_radio_buttons
#define stash_group_add_spin_button_integer \
geany_functions->p_stash->stash_group_add_spin_button_integer
#define stash_group_add_combo_box \
geany_functions->p_stash->stash_group_add_combo_box
#define stash_group_add_combo_box_entry \
geany_functions->p_stash->stash_group_add_combo_box_entry
#define stash_group_add_entry \
geany_functions->p_stash->stash_group_add_entry
#define stash_group_add_widget_property \
geany_functions->p_stash->stash_group_add_widget_property
#define stash_group_display \
geany_functions->p_stash->stash_group_display
#define stash_group_update \
geany_functions->p_stash->stash_group_update
#define stash_group_free_settings \
geany_functions->p_stash->stash_group_free_settings
#define symbols_get_context_separator \
geany_functions->p_symbols->symbols_get_context_separator
#define build_activate_menu_item \
geany_functions->p_build->build_activate_menu_item
#define build_get_current_menu_item \
geany_functions->p_build->build_get_current_menu_item
#define build_remove_menu_item \
geany_functions->p_build->build_remove_menu_item
#define build_set_menu_item \
geany_functions->p_build->build_set_menu_item
#define build_get_group_count \
geany_functions->p_build->build_get_group_count
#define project_write_config \
geany_functions->p_project->project_write_config
#include "geanyplugin.h"
#endif
#endif /* GEANY_FUNCTIONS */

View File

@ -28,27 +28,39 @@
#ifndef GEANY_PLUGIN_H
#define GEANY_PLUGIN_H 1
/* Note: only include headers that define types or macros, not just functions */
#ifndef HAVE_PLUGINS
# define HAVE_PLUGINS 1
#endif
/* Only include public headers here */
#include "app.h"
#include "build.h"
#include "dialogs.h"
#include "document.h"
#include "editor.h"
#include "encodings.h"
#include "filetypes.h"
#include "geany.h"
#include "geanyfunctions.h"
#include "highlighting.h"
#include "keybindings.h"
#include "main.h"
#include "msgwindow.h"
#include "navqueue.h"
#include "plugindata.h"
#include "pluginutils.h"
#include "prefs.h"
#include "project.h"
#include "sciwrappers.h"
#include "search.h"
#include "stash.h"
#include "support.h"
#include "symbols.h"
#include "templates.h"
#include "toolbar.h"
#include "ui_utils.h"
#include "utils.h"
#include "geanyfunctions.h"
#include "gtkcompat.h"
#endif

View File

@ -1,98 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# genapi.py - this file is part of Geany, a fast and lightweight IDE
#
# Copyright 2008-2011 Nick Treleaven <nick.treleaven<at>btinternet.com>
# Copyright 2008-2011 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
#
# 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)
r"""
Creates macros for each plugin API function pointer, e.g.:
#define plugin_add_toolbar_item \
geany_functions->p_plugin->plugin_add_toolbar_item
"""
import re
import sys
def get_function_names():
names = []
filep = open('../src/plugins.c')
while 1:
line = filep.readline()
if line == "":
break
match = re.match("^\t&([a-z][a-z0-9_]+)", line)
if match:
symbol = match.group(1)
if not symbol.endswith('_funcs'):
names.append(symbol)
filep.close()
return names
def get_api_tuple(source):
match = re.match("^([a-z]+)_([a-z][a-z0-9_]+)$", source)
return 'p_' + match.group(1), match.group(2)
header = \
r'''/* This file is generated automatically by genapi.py - do not edit. */
/** @file %s @ref geany_functions wrappers.
* This allows the use of normal API function names in plugins by defining macros.
*
* E.g.:@code
* #define plugin_add_toolbar_item \
* geany_functions->p_plugin->plugin_add_toolbar_item @endcode
*
* You need to declare the @ref geany_functions symbol yourself.
*
* Note: This must be included after all other API headers to prevent conflicts with
* other header's function prototypes - this is done for you when using geanyplugin.h.
*/
#ifndef GEANY_FUNCTIONS_H
#define GEANY_FUNCTIONS_H
'''
if __name__ == "__main__":
outfile = 'geanyfunctions.h'
fnames = get_function_names()
if not fnames:
sys.exit("No function names read!")
f = open(outfile, 'w')
f.write(header % (outfile))
for fname in fnames:
ptr, name = get_api_tuple(fname)
# note: name no longer needed
f.write('#define %s \\\n\tgeany_functions->%s->%s\n' % (fname, ptr, fname))
f.write('\n#endif\n')
f.close()
if not '-q' in sys.argv:
sys.stdout.write('Generated %s\n' % outfile)

View File

@ -16,8 +16,8 @@ src/geanyentryaction.c
src/highlighting.c
src/keybindings.c
src/keyfile.c
src/libmain.c
src/log.c
src/main.c
src/msgwindow.c
src/navqueue.c
src/notebook.c

View File

@ -1,7 +1,7 @@
SUBDIRS = include
noinst_LIBRARIES=libscintilla.a
noinst_LTLIBRARIES=libscintilla.la
AM_CXXFLAGS = -DNDEBUG -DGTK -DSCI_LEXER -DG_THREADS_IMPL_NONE
@ -139,9 +139,10 @@ src/XPM.cxx \
src/XPM.h \
$(LEXER_SRCS)
libscintilla_a_SOURCES = $(SRCS)
libscintilla_la_SOURCES = $(SRCS)
AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/include -I$(srcdir)/src -I$(srcdir)/lexlib @GTK_CFLAGS@
AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/include -I$(srcdir)/src -I$(srcdir)/lexlib \
@GTK_CFLAGS@ @LIBGEANY_CFLAGS@
marshallers: gtk/scintilla-marshal.list
glib-genmarshal --prefix scintilla_marshal gtk/scintilla-marshal.list --header > gtk/scintilla-marshal.h

View File

@ -3104,6 +3104,7 @@ sptr_t ScintillaGTK::DirectFunction(
return reinterpret_cast<ScintillaGTK *>(ptr)->WndProc(iMessage, wParam, lParam);
}
GEANY_API_SYMBOL
sptr_t scintilla_send_message(ScintillaObject *sci, unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
ScintillaGTK *psci = reinterpret_cast<ScintillaGTK *>(sci->pscin);
return psci->WndProc(iMessage, wParam, lParam);
@ -3252,6 +3253,7 @@ static void scintilla_init(ScintillaObject *sci) {
}
}
GEANY_API_SYMBOL
GtkWidget* scintilla_new() {
GtkWidget *widget = GTK_WIDGET(g_object_new(scintilla_get_type(), NULL));
gtk_widget_set_direction(widget, GTK_TEXT_DIR_LTR);

View File

@ -32,7 +32,9 @@ vpath %.h ../src ../include ../lexlib
vpath %.cxx ../src ../lexlib ../lexers
INCLUDEDIRS=-I ../include -I ../src -I ../lexlib
CXXBASEFLAGS=-Wall -Wno-missing-braces -Wno-char-subscripts -DGTK -DSCI_LEXER $(INCLUDEDIRS)
CXXBASEFLAGS=-Wall -Wno-missing-braces -Wno-char-subscripts -DGTK -DSCI_LEXER $(INCLUDEDIRS) \
-DGEANY_EXPORT_SYMBOL="__declspec(dllexport)" \
-DGEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL
ifdef THREADS
THREADFLAGS=

View File

@ -1,5 +1,25 @@
A patch to Scintilla 2.29 containing our changes to Scintilla
(removing unused lexers and an updated marshallers file).
diff --git a/scintilla/gtk/ScintillaGTK.cxx b/scintilla/gtk/ScintillaGTK.cxx
index 18e3358..5c405bc 100644
--- scintilla/gtk/ScintillaGTK.cxx
+++ scintilla/gtk/ScintillaGTK.cxx
@@ -2959,6 +2959,7 @@ sptr_t ScintillaGTK::DirectFunction(
return reinterpret_cast<ScintillaGTK *>(ptr)->WndProc(iMessage, wParam, lParam);
}
+GEANY_API_SYMBOL
sptr_t scintilla_send_message(ScintillaObject *sci, unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
ScintillaGTK *psci = reinterpret_cast<ScintillaGTK *>(sci->pscin);
return psci->WndProc(iMessage, wParam, lParam);
@@ -3107,6 +3108,7 @@ static void scintilla_init(ScintillaObject *sci) {
}
}
+GEANY_API_SYMBOL
GtkWidget* scintilla_new() {
GtkWidget *widget = GTK_WIDGET(g_object_new(scintilla_get_type(), NULL));
gtk_widget_set_direction(widget, GTK_TEXT_DIR_LTR);
diff -Naur scintilla_orig/gtk/scintilla-marshal.c scintilla/gtk/scintilla-marshal.c
--- scintilla_orig/gtk/scintilla-marshal.c 2010-10-27 23:15:45.000000000 +0200
+++ scintilla/gtk/scintilla-marshal.c 2011-04-03 17:42:59.000000000 +0200

View File

@ -3,7 +3,6 @@
EXTRA_DIST = \
gb.c \
win32.c win32.h \
plugindata.h \
documentprivate.h \
filetypesprivate.h \
@ -12,9 +11,53 @@ EXTRA_DIST = \
projectprivate.h \
makefile.win32
bin_PROGRAMS = geany
AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/scintilla/include \
-I$(top_srcdir)/tagmanager/src \
-DGTK \
-DGEANY_PRIVATE \
-DG_LOG_DOMAIN=\""Geany"\" \
@GTK_CFLAGS@ @GTHREAD_CFLAGS@ \
$(MAC_INTEGRATION_CFLAGS)
SRCS = \
bin_PROGRAMS = geany
lib_LTLIBRARIES = libgeany.la
geany_SOURCES = main.c
geany_LDADD = libgeany.la $(GTK_LIBS) $(GTHREAD_LIBS) $(INTLLIBS)
geany_includedir = $(includedir)/geany
geany_include_HEADERS = \
app.h \
build.h \
dialogs.h \
document.h \
editor.h \
encodings.h \
filetypes.h \
geany.h \
gtkcompat.h \
highlighting.h \
keybindings.h \
main.h \
msgwindow.h \
navqueue.h \
plugindata.h \
pluginutils.h \
prefs.h \
project.h \
sciwrappers.h \
search.h \
stash.h \
support.h \
symbols.h \
templates.h \
toolbar.h \
ui_utils.h \
utils.h
libgeany_la_SOURCES = \
about.c about.h \
app.h \
build.c build.h \
@ -34,7 +77,7 @@ SRCS = \
keybindings.c keybindings.h \
keyfile.c keyfile.h \
log.c log.h \
main.c main.h geany.h \
libmain.c main.h geany.h \
msgwindow.c msgwindow.h \
navqueue.c navqueue.h \
notebook.c notebook.h \
@ -58,104 +101,70 @@ SRCS = \
ui_utils.c ui_utils.h \
utils.c utils.h
libgeany_la_CFLAGS = $(AM_CPPFLAGS) @LIBGEANY_CFLAGS@
libgeany_la_LDFLAGS = @LIBGEANY_LDFLAGS@
geany_includedir = $(includedir)/geany
# only install headers that define types or macros, not just functions
geany_include_HEADERS = \
app.h \
build.h \
document.h \
editor.h \
encodings.h \
filetypes.h \
geany.h \
gtkcompat.h \
highlighting.h \
keybindings.h \
msgwindow.h \
plugindata.h \
prefs.h \
project.h \
search.h \
stash.h \
support.h \
templates.h \
toolbar.h \
ui_utils.h \
utils.h
AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/scintilla/include \
-I$(top_srcdir)/tagmanager/src \
@GTK_CFLAGS@ @GTHREAD_CFLAGS@ $(MAC_INTEGRATION_CFLAGS)
# tell automake we have a C++ file so it uses the C++ linker we need for Scintilla
nodist_EXTRA_geany_SOURCES = dummy.cxx
if MINGW
# build Geany for Windows on non-Windows systems (cross-compile)
geany_SOURCES = $(SRCS) win32.c win32.h
geany_LDADD = \
$(top_builddir)/scintilla/libscintilla.a \
$(top_builddir)/tagmanager/ctags/libctags.a \
$(top_builddir)/tagmanager/mio/libmio.a \
$(top_builddir)/tagmanager/src/libtagmanager.a \
libgeany_la_LIBADD = \
$(top_builddir)/scintilla/libscintilla.la \
$(top_builddir)/tagmanager/ctags/libctags.la \
$(top_builddir)/tagmanager/mio/libmio.la \
$(top_builddir)/tagmanager/src/libtagmanager.la \
@GTK_LIBS@ \
@GTHREAD_LIBS@ \
$(INTLLIBS) \
-lole32 -luuid -lwsock32 \
geany_private.res
$(MAC_INTEGRATION_LIBS) \
$(INTLLIBS)
AM_CFLAGS = -DGEANY_DATADIR=\"data\" \
-DGEANY_DOCDIR=\"\" \
-DGEANY_LIBDIR=\"\" \
-DGEANY_LOCALEDIR=\"\" \
-DGEANY_PREFIX=\"\" \
-DGEANY_PRIVATE \
-DGTK \
-DG_LOG_DOMAIN=\""Geany"\"
# tell automake we have a C++ file so it uses the C++ linker we need for Scintilla
nodist_EXTRA_libgeany_la_SOURCES = dummy1.cxx
geany_LDFLAGS = -mwindows -mms-bitfields
CLEANFILES =
if MINGW
# build Geany for Windows (possibly on non-Windows systems -- cross-compile)
AM_CPPFLAGS += \
-DGEANY_DATADIR=\"data\" \
-DGEANY_DOCDIR=\"\" \
-DGEANY_LIBDIR=\"\" \
-DGEANY_LOCALEDIR=\"\" \
-DGEANY_PREFIX=\"\"
geany_LDADD += geany_private.res
WINDRES = $(host_alias)-windres
geany_private.res: $(top_srcdir)/geany_private.rc
$(WINDRES) -i $(top_srcdir)/geany_private.rc --input-format=rc -o $@ -O coff
clean-local:
rm -f geany_private.res
libgeany_la_SOURCES += win32.c win32.h
libgeany_la_LIBADD += -lole32 -lwsock32 -lcomdlg32
libgeany_la_LDFLAGS += -Wl,-luuid -mwindows -mms-bitfields -no-undefined
CLEANFILES += geany_private.res
else
# build Geany for all other platforms
geany_SOURCES = $(SRCS) vte.c vte.h
AM_CPPFLAGS += \
-DGEANY_DATADIR=\""$(datadir)"\" \
-DGEANY_DOCDIR=\""$(docdir)"\" \
-DGEANY_LIBDIR=\""$(libdir)"\" \
-DGEANY_LOCALEDIR=\""$(localedir)"\" \
-DGEANY_PREFIX=\""$(prefix)"\"
geany_LDADD = \
$(top_builddir)/scintilla/libscintilla.a \
$(top_builddir)/tagmanager/ctags/libctags.a \
$(top_builddir)/tagmanager/mio/libmio.a \
$(top_builddir)/tagmanager/src/libtagmanager.a \
@GTK_LIBS@ \
@GTHREAD_LIBS@ \
$(MAC_INTEGRATION_LIBS) \
$(INTLLIBS)
AM_CFLAGS = -DGEANY_DATADIR=\""$(datadir)"\" \
-DGEANY_DOCDIR=\""$(docdir)"\" \
-DGEANY_LIBDIR=\""$(libdir)"\" \
-DGEANY_LOCALEDIR=\""$(localedir)"\" \
-DGEANY_PREFIX=\""$(prefix)"\" \
-DGEANY_PRIVATE \
-DGTK \
-DG_LOG_DOMAIN=\""Geany"\"
clean-local:
libgeany_la_SOURCES += vte.c vte.h
endif
callbacks.c: signallist.i
glade_file=$(top_srcdir)/data/geany.glade
signallist.i: $(glade_file) Makefile
$(AM_V_GEN)( \
echo '/* This file is auto-generated, do not edit. */' && \
$(SED) -n 's/^.*handler="\([^"]\{1,\}\)".*$$/ITEM(\1)/p' "$(glade_file)" \
| $(SORT) | $(UNIQ) \
) > $@ || { $(RM) $@ && exit 1; }
CLEANFILES += signallist.i

View File

@ -509,6 +509,7 @@ static GeanyBuildCommand *get_build_group(const GeanyBuildSource src, const Gean
* Updates the menu.
*
**/
GEANY_API_SYMBOL
void build_remove_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp, const gint cmd)
{
GeanyBuildCommand *bc;
@ -569,6 +570,7 @@ GeanyBuildCommand *build_get_menu_item(GeanyBuildSource src, GeanyBuildGroup grp
* This is a pointer to an internal structure and must not be freed.
*
**/
GEANY_API_SYMBOL
const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint cmd,
const GeanyBuildCmdEntries fld)
{
@ -609,7 +611,7 @@ const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint
* @param val the value to set the field to, is copied
*
**/
GEANY_API_SYMBOL
void build_set_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp,
const guint cmd, const GeanyBuildCmdEntries fld, const gchar *val)
{
@ -654,7 +656,7 @@ void build_set_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp,
* @param cmd the index of the command within the group.
*
**/
GEANY_API_SYMBOL
void build_activate_menu_item(const GeanyBuildGroup grp, const guint cmd)
{
on_build_menu_item(NULL, GRP_CMD_TO_POINTER(grp, cmd));
@ -2782,7 +2784,7 @@ void build_set_group_count(GeanyBuildGroup grp, gint count)
* @return a count of the number of commands in the group
*
**/
GEANY_API_SYMBOL
guint build_get_group_count(const GeanyBuildGroup grp)
{
g_return_val_if_fail(grp < GEANY_GBG_COUNT, 0);

File diff suppressed because it is too large Load Diff

View File

@ -26,83 +26,86 @@
G_BEGIN_DECLS
/* Defined in auto-generated code in signalconn.c */
void callbacks_connect(GtkBuilder *builder);
extern gboolean ignore_callback;
G_MODULE_EXPORT void on_new1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_new1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_save1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_save1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_save_as1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_save_as1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_quit1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_quit1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_open1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_open1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_save_all1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_save_all1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_close1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_close1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_close_all1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_close_all1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_replace_tabs_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_replace_tabs_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_toolbutton_search_clicked(GtkAction *action, gpointer user_data);
gboolean toolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
G_MODULE_EXPORT void on_undo1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_undo1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_redo1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_redo1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_cut1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_cut1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_copy1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_copy1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_paste1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_paste1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_delete1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_delete1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_zoom_in1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_zoom_in1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_zoom_out1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_zoom_out1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_toolbar_search_entry_changed(GtkAction *action, const gchar *text, gpointer user_data);
void on_toolbar_search_entry_activate(GtkAction *action, const gchar *text, gpointer user_data);
G_MODULE_EXPORT void on_toggle_case1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_toggle_case1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_usage1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_usage1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_normal_size1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_normal_size1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_show_color_chooser1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_show_color_chooser1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_next1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_next1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_previous1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_previous1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_nextsel1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_nextsel1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_prevsel1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_prevsel1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_replace1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_replace1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_in_files1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_in_files1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_toolbutton_reload_clicked(GtkAction *action, gpointer user_data);
void on_toolbutton_reload_clicked(GtkAction *action, gpointer user_data);
G_MODULE_EXPORT void on_go_to_line_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_go_to_line_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_help1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_help1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_toolbutton_compile_clicked(GtkAction *action, gpointer user_data);
G_MODULE_EXPORT void on_line_wrapping1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data);
void on_line_wrapping1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data);
void on_toolbutton_goto_entry_activate(GtkAction *action, const gchar *text, gpointer user_data);
@ -110,63 +113,63 @@ void on_toolbutton_goto_clicked(GtkAction *action, gpointer user_data);
void on_toolbutton_run_clicked(GtkAction *action, gpointer user_data);
G_MODULE_EXPORT void on_menu_remove_indicators1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_remove_indicators1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_print1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_print1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_select_all1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_select_all1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_show_sidebar1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data);
void on_menu_show_sidebar1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_comment_line1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_comment_line1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_uncomment_line1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_uncomment_line1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_increase_indent1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_increase_indent1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_decrease_indent1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_decrease_indent1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_toggle_line_commentation1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_toggle_line_commentation1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_next_message1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_next_message1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_project_new1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_project_new1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_project_open1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_project_open1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_project_close1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_project_close1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_project_properties1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_project_properties1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_open_selected_file1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_open_selected_file1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_remove_markers1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_remove_markers1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_context_action1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_context_action1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_menu_toggle_all_additional_widgets1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_menu_toggle_all_additional_widgets1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_toolbutton_back_activate(GtkAction *action, gpointer user_data);
void on_toolbutton_forward_activate(GtkAction *action, gpointer user_data);
G_MODULE_EXPORT gboolean on_motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer user_data);
gboolean on_motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer user_data);
G_MODULE_EXPORT gboolean on_escape_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data);
gboolean on_escape_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data);
G_MODULE_EXPORT void on_line_breaking1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_line_breaking1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_replace_spaces_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_replace_spaces_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_previous_message1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_previous_message1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_close_other_documents1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_close_other_documents1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_find_document_usage1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_find_document_usage1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_send_selection_to_vte1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_send_selection_to_vte1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_MODULE_EXPORT void on_plugin_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data);
void on_plugin_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data);
G_END_DECLS

View File

@ -665,6 +665,7 @@ static gboolean show_save_as_gtk(GeanyDocument *doc)
*
* @return @c TRUE if the file was saved, otherwise @c FALSE.
**/
GEANY_API_SYMBOL
gboolean dialogs_show_save_as(void)
{
GeanyDocument *doc = document_get_current();
@ -726,6 +727,7 @@ static void show_msgbox_dialog(GtkWidget *dialog, GtkMessageType type, GtkWindow
* @param text Printf()-style format string.
* @param ... Arguments for the @a text format string.
**/
GEANY_API_SYMBOL
void dialogs_show_msgbox(GtkMessageType type, const gchar *text, ...)
{
#ifndef G_OS_WIN32
@ -1067,6 +1069,7 @@ static void on_dialog_input(const gchar *str, gpointer data)
* @param default_text Text to display in the input field, or @c NULL.
* @return New copy of user input or @c NULL if cancelled.
* @since 0.20. */
GEANY_API_SYMBOL
gchar *dialogs_show_input(const gchar *title, GtkWindow *parent, const gchar *label_text,
const gchar *default_text)
{
@ -1107,6 +1110,7 @@ gchar *dialogs_show_input_goto_line(const gchar *title, GtkWindow *parent, const
*
* @since 0.16
**/
GEANY_API_SYMBOL
gboolean dialogs_show_input_numeric(const gchar *title, const gchar *label_text,
gdouble *value, gdouble min, gdouble max, gdouble step)
{
@ -1372,6 +1376,7 @@ static gint show_prompt(GtkWidget *parent,
*
* @return @c TRUE if the user answered with Yes, otherwise @c FALSE.
**/
GEANY_API_SYMBOL
gboolean dialogs_show_question(const gchar *text, ...)
{
gchar *string;

View File

@ -148,6 +148,7 @@ static GtkWidget* document_show_message(GeanyDocument *doc, GtkMessageType msgty
*
* @since 0.15
**/
GEANY_API_SYMBOL
GeanyDocument* document_find_by_real_path(const gchar *realname)
{
guint i;
@ -193,6 +194,7 @@ static gchar *get_real_path_from_utf8(const gchar *utf8_filename)
* @return The matching document, or @c NULL.
* @see document_find_by_real_path().
**/
GEANY_API_SYMBOL
GeanyDocument *document_find_by_filename(const gchar *utf8_filename)
{
guint i;
@ -256,6 +258,7 @@ GeanyDocument *document_find_by_sci(ScintillaObject *sci)
* gboolean still_open = (doc != NULL);
* @endcode
* @since 1.25. */
GEANY_API_SYMBOL
GeanyDocument *document_find_by_id(guint id)
{
guint i;
@ -297,6 +300,7 @@ static GtkWidget *document_get_notebook_child(GeanyDocument *doc)
* @param doc The document.
* @return The index.
* @since 0.19 */
GEANY_API_SYMBOL
gint document_get_notebook_page(GeanyDocument *doc)
{
GtkWidget *child = document_get_notebook_child(doc);
@ -359,6 +363,7 @@ GeanyDocument *document_get_from_notebook_child(GtkWidget *page)
*
* @return The corresponding document for the given notebook page, or @c NULL.
**/
GEANY_API_SYMBOL
GeanyDocument *document_get_from_page(guint page_num)
{
GtkWidget *parent;
@ -377,6 +382,7 @@ GeanyDocument *document_get_from_page(guint page_num)
*
* @return A pointer to the current document or @c NULL if there are no opened documents.
**/
GEANY_API_SYMBOL
GeanyDocument *document_get_current(void)
{
gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
@ -417,6 +423,7 @@ void document_finalize(void)
* @since 0.17
*/
/* TODO make more use of this */
GEANY_API_SYMBOL
gchar *document_get_basename_for_display(GeanyDocument *doc, gint length)
{
gchar *base_name, *short_name;
@ -464,6 +471,7 @@ void document_update_tab_label(GeanyDocument *doc)
* @param doc The document to use.
* @param changed Whether the document state should indicate changes have been made.
**/
GEANY_API_SYMBOL
void document_set_text_changed(GeanyDocument *doc, gboolean changed)
{
g_return_if_fail(doc != NULL);
@ -687,6 +695,7 @@ static GeanyDocument *document_create(const gchar *utf8_filename)
*
* @since 0.15
**/
GEANY_API_SYMBOL
gboolean document_close(GeanyDocument *doc)
{
g_return_val_if_fail(doc, FALSE);
@ -776,6 +785,7 @@ static gboolean remove_page(guint page_num)
*
* @return @c TRUE if the document was actually removed or @c FALSE otherwise.
**/
GEANY_API_SYMBOL
gboolean document_remove_page(guint page_num)
{
gboolean done = remove_page(page_num);
@ -817,6 +827,7 @@ GeanyDocument *document_new_file_if_non_open(void)
*
* @return The new document.
**/
GEANY_API_SYMBOL
GeanyDocument *document_new_file(const gchar *utf8_filename, GeanyFiletype *ft, const gchar *text)
{
GeanyDocument *doc;
@ -900,6 +911,7 @@ GeanyDocument *document_new_file(const gchar *utf8_filename, GeanyFiletype *ft,
*
* @return The document opened or @c NULL.
**/
GEANY_API_SYMBOL
GeanyDocument *document_open_file(const gchar *locale_filename, gboolean readonly,
GeanyFiletype *ft, const gchar *forced_enc)
{
@ -1495,6 +1507,7 @@ void document_open_file_list(const gchar *data, gsize length)
* @param ft The filetype for the document or @c NULL to auto-detect the filetype.
* @param forced_enc The file encoding to use or @c NULL to auto-detect the file encoding.
**/
GEANY_API_SYMBOL
void document_open_files(const GSList *filenames, gboolean readonly, GeanyFiletype *ft,
const gchar *forced_enc)
{
@ -1516,6 +1529,7 @@ void document_open_files(const GSList *filenames, gboolean readonly, GeanyFilety
*
* @return @c TRUE if the document was actually reloaded or @c FALSE otherwise.
**/
GEANY_API_SYMBOL
gboolean document_reload_force(GeanyDocument *doc, const gchar *forced_enc)
{
gint pos = 0;
@ -1661,6 +1675,7 @@ static void replace_header_filename(GeanyDocument *doc)
*
* @since 0.16
**/
GEANY_API_SYMBOL
void document_rename_file(GeanyDocument *doc, const gchar *new_filename)
{
gchar *old_locale_filename = utils_get_locale_from_utf8(doc->file_name);
@ -1726,6 +1741,7 @@ gboolean document_need_save_as(GeanyDocument *doc)
*
* @since 0.16
**/
GEANY_API_SYMBOL
gboolean document_save_file_as(GeanyDocument *doc, const gchar *utf8_fname)
{
gboolean ret;
@ -2013,6 +2029,7 @@ static gboolean save_file_handle_infobars(GeanyDocument *doc, gboolean force)
*
* @return @c TRUE if the file was saved or @c FALSE if the file could not or should not be saved.
**/
GEANY_API_SYMBOL
gboolean document_save_file(GeanyDocument *doc, gboolean force)
{
gchar *errmsg;
@ -2726,6 +2743,7 @@ static void document_load_config(GeanyDocument *doc, GeanyFiletype *type,
/** Sets the filetype of the document (which controls syntax highlighting and tags)
* @param doc The document to use.
* @param type The filetype. */
GEANY_API_SYMBOL
void document_set_filetype(GeanyDocument *doc, GeanyFiletype *type)
{
gboolean ft_changed;
@ -2778,6 +2796,7 @@ void document_reload_config(GeanyDocument *doc)
* @param doc The document to use.
* @param new_encoding The encoding to be set for the document.
**/
GEANY_API_SYMBOL
void document_set_encoding(GeanyDocument *doc, const gchar *new_encoding)
{
if (doc == NULL || new_encoding == NULL ||
@ -3141,6 +3160,7 @@ const gchar *document_get_status_widget_class(GeanyDocument *doc)
*
* @since 0.16
*/
GEANY_API_SYMBOL
const GdkColor *document_get_status_color(GeanyDocument *doc)
{
gint status;
@ -3192,6 +3212,7 @@ const GdkColor *document_get_status_color(GeanyDocument *doc)
*
* @since 0.16
*/
GEANY_API_SYMBOL
GeanyDocument *document_index(gint idx)
{
return (idx >= 0 && idx < (gint) documents_array->len) ? documents[idx] : NULL;
@ -3633,6 +3654,7 @@ gboolean document_check_disk_status(GeanyDocument *doc, gboolean force)
*
* @since 0.21
*/
GEANY_API_SYMBOL
gint document_compare_by_display_name(gconstpointer a, gconstpointer b)
{
GeanyDocument *doc_a = *((GeanyDocument**) a);
@ -3662,6 +3684,7 @@ gint document_compare_by_display_name(gconstpointer a, gconstpointer b)
*
* @since 0.21 (GEANY_API_VERSION 209)
*/
GEANY_API_SYMBOL
gint document_compare_by_tab_order(gconstpointer a, gconstpointer b)
{
GeanyDocument *doc_a = *((GeanyDocument**) a);
@ -3691,6 +3714,7 @@ gint document_compare_by_tab_order(gconstpointer a, gconstpointer b)
*
* @since 0.21 (GEANY_API_VERSION 209)
*/
GEANY_API_SYMBOL
gint document_compare_by_tab_order_reverse(gconstpointer a, gconstpointer b)
{
return -1 * document_compare_by_tab_order(a, b);

View File

@ -1202,6 +1202,7 @@ get_default_indent_prefs(void)
* settings may have changed, or if this function has been called for a different editor.
* @param editor The editor, or @c NULL to get the default indent prefs.
* @return The indent prefs. */
GEANY_API_SYMBOL
const GeanyIndentPrefs *
editor_get_indent_prefs(GeanyEditor *editor)
{
@ -1726,6 +1727,7 @@ void editor_find_current_word_sciwc(GeanyEditor *editor, gint pos, gchar *word,
*
* @since 0.16
*/
GEANY_API_SYMBOL
gchar *editor_get_word_at_pos(GeanyEditor *editor, gint pos, const gchar *wordchars)
{
static gchar cword[GEANY_MAX_WORD_LENGTH];
@ -2343,6 +2345,7 @@ static void fix_indentation(GeanyEditor *editor, GString *buf)
* @warning Make sure all \\t tab chars in @a text are intended as indent widths or alignment,
* not hard tabs, as those won't be preserved.
* @note This doesn't scroll the cursor in view afterwards. **/
GEANY_API_SYMBOL
void editor_insert_text_block(GeanyEditor *editor, const gchar *text, gint insert_pos,
gint cursor_index, gint newline_indent_size, gboolean replace_newlines)
{
@ -4064,6 +4067,7 @@ void editor_indicator_clear_errors(GeanyEditor *editor)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void editor_indicator_clear(GeanyEditor *editor, gint indic)
{
glong last_pos;
@ -4089,6 +4093,7 @@ void editor_indicator_clear(GeanyEditor *editor, gint indic)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void editor_indicator_set_on_line(GeanyEditor *editor, gint indic, gint line)
{
gint start, end;
@ -4138,6 +4143,7 @@ void editor_indicator_set_on_line(GeanyEditor *editor, gint indic, gint line)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void editor_indicator_set_on_range(GeanyEditor *editor, gint indic, gint start, gint end)
{
g_return_if_fail(editor != NULL);
@ -4191,6 +4197,7 @@ void editor_insert_color(GeanyEditor *editor, const gchar *colour)
*
* @since 0.20
*/
GEANY_API_SYMBOL
gint editor_get_eol_char_mode(GeanyEditor *editor)
{
gint mode = file_prefs.default_eol_character;
@ -4212,6 +4219,7 @@ gint editor_get_eol_char_mode(GeanyEditor *editor)
*
* @since 0.19
*/
GEANY_API_SYMBOL
const gchar *editor_get_eol_char_name(GeanyEditor *editor)
{
gint mode = file_prefs.default_eol_character;
@ -4233,6 +4241,7 @@ const gchar *editor_get_eol_char_name(GeanyEditor *editor)
*
* @since 0.19
*/
GEANY_API_SYMBOL
gint editor_get_eol_char_len(GeanyEditor *editor)
{
gint mode = file_prefs.default_eol_character;
@ -4258,6 +4267,7 @@ gint editor_get_eol_char_len(GeanyEditor *editor)
*
* @since 0.19
*/
GEANY_API_SYMBOL
const gchar *editor_get_eol_char(GeanyEditor *editor)
{
gint mode = file_prefs.default_eol_character;
@ -4492,6 +4502,7 @@ void editor_set_line_wrapping(GeanyEditor *editor, gboolean wrap)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void editor_set_indent_type(GeanyEditor *editor, GeanyIndentType type)
{
editor_set_indent(editor, type, editor->indent_width);
@ -4567,6 +4578,7 @@ gboolean editor_goto_line(GeanyEditor *editor, gint line_no, gint offset)
*
* @since 0.20
**/
GEANY_API_SYMBOL
gboolean editor_goto_pos(GeanyEditor *editor, gint pos, gboolean mark)
{
g_return_val_if_fail(editor, FALSE);
@ -4811,6 +4823,7 @@ static ScintillaObject *create_new_sci(GeanyEditor *editor)
*
* @since 0.15
**/
GEANY_API_SYMBOL
ScintillaObject *editor_create_widget(GeanyEditor *editor)
{
const GeanyIndentPrefs *iprefs = get_default_indent_prefs();
@ -5141,6 +5154,7 @@ void editor_indent(GeanyEditor *editor, gboolean increase)
* @param snippet_name Snippet name.
* @return snippet or @c NULL if it was not found. Must not be freed.
*/
GEANY_API_SYMBOL
const gchar *editor_find_snippet(GeanyEditor *editor, const gchar *snippet_name)
{
const gchar *subhash_name = editor ? editor->document->file_type->name : "Default";
@ -5157,6 +5171,7 @@ const gchar *editor_find_snippet(GeanyEditor *editor, const gchar *snippet_name)
* @param pos .
* @param snippet .
*/
GEANY_API_SYMBOL
void editor_insert_snippet(GeanyEditor *editor, gint pos, const gchar *snippet)
{
GString *pattern;

View File

@ -263,6 +263,7 @@ const GeanyEncoding *encodings_get_from_index(gint idx)
*
* @since 0.13
**/
GEANY_API_SYMBOL
const gchar* encodings_get_charset_from_index(gint idx)
{
g_return_val_if_fail(idx >= 0 && idx < GEANY_ENCODINGS_MAX, NULL);
@ -639,6 +640,7 @@ void encodings_encoding_store_cell_data_func(GtkCellLayout *cell_layout,
* @return If the conversion was successful, a newly allocated nul-terminated string,
* which must be freed with @c g_free(). Otherwise @c NULL.
**/
GEANY_API_SYMBOL
gchar *encodings_convert_to_utf8_from_charset(const gchar *buffer, gssize size,
const gchar *charset, gboolean fast)
{
@ -797,6 +799,7 @@ static gchar *encodings_convert_to_utf8_with_suggestion(const gchar *buffer, gss
* @return If the conversion was successful, a newly allocated nul-terminated string,
* which must be freed with @c g_free(). Otherwise @c NULL.
**/
GEANY_API_SYMBOL
gchar *encodings_convert_to_utf8(const gchar *buffer, gssize size, gchar **used_encoding)
{
gchar *regex_charset;

View File

@ -235,6 +235,7 @@ static gint cmp_filetype(gconstpointer pft1, gconstpointer pft2, gpointer data)
* The list does not change on subsequent calls.
* @return The list - do not free.
* @see filetypes_by_title. */
GEANY_API_SYMBOL
const GSList *filetypes_get_sorted_by_name(void)
{
static GSList *list = NULL;
@ -734,6 +735,7 @@ GeanyFiletype *filetypes_detect_from_document(GeanyDocument *doc)
* @return The detected filetype for @a utf8_filename or @c filetypes[GEANY_FILETYPES_NONE]
* if it could not be detected.
**/
GEANY_API_SYMBOL
GeanyFiletype *filetypes_detect_from_file(const gchar *utf8_filename)
{
gchar line[1024];
@ -1216,6 +1218,7 @@ gboolean filetype_has_tags(GeanyFiletype *ft)
*
* @since 0.15
**/
GEANY_API_SYMBOL
GeanyFiletype *filetypes_lookup_by_name(const gchar *name)
{
GeanyFiletype *ft;
@ -1461,6 +1464,7 @@ void filetypes_reload_extensions(void)
*
* @since 0.16
*/
GEANY_API_SYMBOL
GeanyFiletype *filetypes_index(gint idx)
{
return (idx >= 0 && idx < (gint) filetypes_array->len) ? filetypes[idx] : NULL;
@ -1498,6 +1502,7 @@ void filetypes_reload(void)
* @param ft .
* @return .
* @since Geany 0.20 */
GEANY_API_SYMBOL
const gchar *filetypes_get_display_name(GeanyFiletype *ft)
{
return ft->id == GEANY_FILETYPES_NONE ? _("None") : ft->name;

View File

@ -1072,6 +1072,7 @@ void highlighting_init_styles(guint filetype_idx, GKeyFile *config, GKeyFile *co
/** Sets up highlighting and other visual settings.
* @param sci Scintilla widget.
* @param ft Filetype settings to use. */
GEANY_API_SYMBOL
void highlighting_set_styles(ScintillaObject *sci, GeanyFiletype *ft)
{
guint lexer_id = get_lexer_filetype(ft);
@ -1161,6 +1162,7 @@ void highlighting_set_styles(ScintillaObject *sci, GeanyFiletype *ft)
* @param style_id A Scintilla lexer style, e.g. @c SCE_DIFF_ADDED. See scintilla/include/SciLexer.h.
* @return A pointer to the style struct.
* @see Scintilla messages @c SCI_STYLEGETFORE, etc, for use with scintilla_send_message(). */
GEANY_API_SYMBOL
const GeanyLexerStyle *highlighting_get_style(gint ft_id, gint style_id)
{
g_return_val_if_fail(ft_id >= 0 && (guint) ft_id < filetypes_array->len, NULL);
@ -1383,6 +1385,7 @@ void highlighting_show_color_scheme_dialog(void)
*
* @return @c TRUE if the style is a string, @c FALSE otherwise.
*/
GEANY_API_SYMBOL
gboolean highlighting_is_string_style(gint lexer, gint style)
{
/* Don't forget STRINGEOL, to prevent completion whilst typing a string with no closing char. */
@ -1570,6 +1573,7 @@ gboolean highlighting_is_string_style(gint lexer, gint style)
*
* @return @c TRUE if the style is a comment, @c FALSE otherwise.
*/
GEANY_API_SYMBOL
gboolean highlighting_is_comment_style(gint lexer, gint style)
{
switch (lexer)
@ -1742,6 +1746,7 @@ gboolean highlighting_is_comment_style(gint lexer, gint style)
*
* @return @c TRUE if the style is code, @c FALSE otherwise.
*/
GEANY_API_SYMBOL
gboolean highlighting_is_code_style(gint lexer, gint style)
{
switch (lexer)

View File

@ -119,6 +119,7 @@ static void add_popup_menu_accels(void);
* @param mods GdkModifierType mask.
* @return Significant modifiers from the mask.
* @since 1.25. */
GEANY_API_SYMBOL
GdkModifierType keybindings_get_modifiers(GdkModifierType mods)
{
#ifdef __APPLE__
@ -134,6 +135,7 @@ GdkModifierType keybindings_get_modifiers(GdkModifierType mods)
* @param key_id Keybinding index for the group.
* @return The keybinding.
* @since 0.19. */
GEANY_API_SYMBOL
GeanyKeyBinding *keybindings_get_item(GeanyKeyGroup *group, gsize key_id)
{
if (group->plugin)
@ -163,6 +165,7 @@ GeanyKeyBinding *keybindings_get_item(GeanyKeyGroup *group, gsize key_id)
* underscores - these won't be displayed.
* @param menu_item Optional widget to set an accelerator for, or @c NULL.
* @return The keybinding - normally this is ignored. */
GEANY_API_SYMBOL
GeanyKeyBinding *keybindings_set_item(GeanyKeyGroup *group, gsize key_id,
GeanyKeyCallback callback, guint key, GdkModifierType mod,
const gchar *kf_name, const gchar *label, GtkWidget *menu_item)
@ -1289,6 +1292,7 @@ GeanyKeyBinding *keybindings_lookup_item(guint group_id, guint key_id)
* Example: @code keybindings_send_command(GEANY_KEY_GROUP_FILE, GEANY_KEYS_FILE_OPEN); @endcode
* @param group_id @ref GeanyKeyGroupID keybinding group index that contains the @a key_id keybinding.
* @param key_id @ref GeanyKeyBindingID keybinding index. */
GEANY_API_SYMBOL
void keybindings_send_command(guint group_id, guint key_id)
{
GeanyKeyBinding *kb;

1405
src/libmain.c Normal file

File diff suppressed because it is too large Load Diff

1381
src/main.c

File diff suppressed because it is too large Load Diff

View File

@ -75,6 +75,8 @@ gboolean main_handle_filename(const gchar *locale_filename);
void main_load_project_from_command_line(const gchar *locale_filename, gboolean use_session);
gint main_lib(gint argc, gchar **argv);
#endif /* GEANY_PRIVATE */
G_END_DECLS

View File

@ -6,7 +6,9 @@ DEFINES = -DHAVE_CONFIG_H \
-DGEANY_LOCALEDIR=\"\" \
-DGEANY_LIBDIR=\"\" \
-DGEANY_PREFIX=\"\" \
-DGTK
-DGTK \
-DGEANY_EXPORT_SYMBOL="__declspec(dllexport)" \
-DGEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL
.SUFFIXES: .c .o .h .a
WINDRES = windres.exe

View File

@ -104,6 +104,7 @@ void msgwin_show_hide_tabs(void)
/** Sets the Messages path for opening any parsed filenames without absolute path
* from message lines.
* @param messages_dir The directory. **/
GEANY_API_SYMBOL
void msgwin_set_messages_dir(const gchar *messages_dir)
{
g_free(msgwindow.messages_dir);
@ -286,6 +287,7 @@ static const GdkColor *get_color(gint msg_color)
* @param format @c printf()-style format string.
* @param ... Arguments for the @c format string.
**/
GEANY_API_SYMBOL
void msgwin_compiler_add(gint msg_color, const gchar *format, ...)
{
gchar *string;
@ -359,6 +361,7 @@ void msgwin_show_hide(gboolean show)
*
* @since 0.15
**/
GEANY_API_SYMBOL
void msgwin_msg_add(gint msg_color, gint line, GeanyDocument *doc, const gchar *format, ...)
{
gchar *string;
@ -417,6 +420,7 @@ void msgwin_msg_add_string(gint msg_color, gint line, GeanyDocument *doc, const
* @param format @c printf()-style format string.
* @param ... Arguments for the @c format string.
**/
GEANY_API_SYMBOL
void msgwin_status_add(const gchar *format, ...)
{
GtkTreeIter iter;
@ -1199,6 +1203,7 @@ static gboolean on_msgwin_button_press_event(GtkWidget *widget, GdkEventButton *
*
* @since 0.15
**/
GEANY_API_SYMBOL
void msgwin_switch_tab(gint tabnum, gboolean show)
{
GtkWidget *widget = NULL; /* widget to focus */
@ -1233,6 +1238,7 @@ void msgwin_switch_tab(gint tabnum, gboolean show)
*
* @since 0.15
**/
GEANY_API_SYMBOL
void msgwin_clear_tab(gint tabnum)
{
GtkListStore *store = NULL;

View File

@ -149,6 +149,7 @@ static void add_new_position(const gchar *utf8_filename, gint pos)
*
* @return @c TRUE if the cursor has changed the position to @a line or @c FALSE otherwise.
**/
GEANY_API_SYMBOL
gboolean navqueue_goto_line(GeanyDocument *old_doc, GeanyDocument *new_doc, gint line)
{
gint pos;

View File

@ -72,7 +72,7 @@ G_BEGIN_DECLS
* Changing this forces all plugins to be recompiled before Geany can load them. */
/* This should usually stay the same if fields are only appended, assuming only pointers to
* structs and not structs themselves are declared by plugins. */
#define GEANY_ABI_VERSION (70 << GEANY_ABI_SHIFT)
#define GEANY_ABI_VERSION (71 << GEANY_ABI_SHIFT)
/** Defines a function to check the plugin is safe to load.
@ -265,499 +265,14 @@ void plugin_cleanup(void);
#endif
/** This contains pointers to functions owned by Geany for plugins to use.
* Functions from the core can be appended when needed by plugin authors, but may
* require some changes. */
typedef struct GeanyFunctions
{
struct DocumentFuncs *p_document; /**< See document.h */
struct SciFuncs *p_sci; /**< See sciwrappers.h */
struct TemplateFuncs *p_templates; /**< See templates.h */
struct UtilsFuncs *p_utils; /**< See utils.h */
struct UIUtilsFuncs *p_ui; /**< See ui_utils.h */
/** @deprecated Use ui_lookup_widget() instead. */
struct SupportFuncs *p_support;
struct DialogFuncs *p_dialogs; /**< See dialogs.h */
/** @deprecated Use @ref GeanyFunctions::p_msgwin instead. */
struct MsgWinFuncs *p_msgwindow;
struct EncodingFuncs *p_encodings; /**< See encodings.h */
struct KeybindingFuncs *p_keybindings; /**< See keybindings.h */
struct TagManagerFuncs *p_tm; /**< See tagmanager/src */
struct SearchFuncs *p_search; /**< See search.h */
struct HighlightingFuncs *p_highlighting; /**< See highlighting.h */
struct FiletypeFuncs *p_filetypes; /**< See filetypes.h */
struct NavQueueFuncs *p_navqueue; /**< See navqueue.h */
struct EditorFuncs *p_editor; /**< See editor.h */
struct MainFuncs *p_main; /**< See main.h */
struct PluginFuncs *p_plugin; /**< See pluginutils.c */
struct ScintillaFuncs *p_scintilla; /**< See ScintillaFuncs */
struct MsgWinFuncs *p_msgwin; /**< See msgwindow.h */
struct StashFuncs *p_stash; /**< See stash.h */
struct SymbolsFuncs *p_symbols; /**< See symbols.h */
struct BuildFuncs *p_build; /**< See build.h */
struct ProjectFuncs *p_project; /**< See project.h */
}
GeanyFunctions;
/* For more information about these functions, see the main source code.
* E.g. for p_document->new_file(), see document_new_file() in document.c. */
/* See document.h */
typedef struct DocumentFuncs
{
struct GeanyDocument* (*document_new_file) (const gchar *utf8_filename, struct GeanyFiletype *ft,
const gchar *text);
struct GeanyDocument* (*document_get_current) (void);
struct GeanyDocument* (*document_get_from_page) (guint page_num);
struct GeanyDocument* (*document_find_by_filename) (const gchar *utf8_filename);
struct GeanyDocument* (*document_find_by_real_path) (const gchar *realname);
gboolean (*document_save_file) (struct GeanyDocument *doc, gboolean force);
struct GeanyDocument* (*document_open_file) (const gchar *locale_filename, gboolean readonly,
struct GeanyFiletype *ft, const gchar *forced_enc);
void (*document_open_files) (const GSList *filenames, gboolean readonly,
struct GeanyFiletype *ft, const gchar *forced_enc);
gboolean (*document_remove_page) (guint page_num);
gboolean (*document_reload_force) (struct GeanyDocument *doc, const gchar *forced_enc);
void (*document_set_encoding) (struct GeanyDocument *doc, const gchar *new_encoding);
void (*document_set_text_changed) (struct GeanyDocument *doc, gboolean changed);
void (*document_set_filetype) (struct GeanyDocument *doc, struct GeanyFiletype *type);
gboolean (*document_close) (struct GeanyDocument *doc);
struct GeanyDocument* (*document_index)(gint idx);
gboolean (*document_save_file_as) (struct GeanyDocument *doc, const gchar *utf8_fname);
void (*document_rename_file) (struct GeanyDocument *doc, const gchar *new_filename);
const GdkColor* (*document_get_status_color) (struct GeanyDocument *doc);
gchar* (*document_get_basename_for_display) (struct GeanyDocument *doc, gint length);
gint (*document_get_notebook_page) (struct GeanyDocument *doc);
gint (*document_compare_by_display_name) (gconstpointer a, gconstpointer b);
gint (*document_compare_by_tab_order) (gconstpointer a, gconstpointer b);
gint (*document_compare_by_tab_order_reverse) (gconstpointer a, gconstpointer b);
GeanyDocument* (*document_find_by_id)(guint id);
}
DocumentFuncs;
struct _ScintillaObject;
/** See http://scintilla.org for the full documentation. */
typedef struct ScintillaFuncs
{
/** Send Scintilla a message. */
long int (*scintilla_send_message) (struct _ScintillaObject *sci, unsigned int iMessage,
long unsigned int wParam, long int lParam);
/** Create a new ScintillaObject widget. */
GtkWidget* (*scintilla_new)(void);
}
ScintillaFuncs;
/** Wrapper functions for Scintilla messages.
* See sciwrappers.h for the list of functions. */
typedef struct SciFuncs
{
/** @deprecated Use @c scintilla_send_message() instead. */
long int (*sci_send_message) (struct _ScintillaObject *sci, unsigned int iMessage,
long unsigned int wParam, long int lParam);
void (*sci_send_command) (struct _ScintillaObject *sci, gint cmd);
void (*sci_start_undo_action) (struct _ScintillaObject *sci);
void (*sci_end_undo_action) (struct _ScintillaObject *sci);
void (*sci_set_text) (struct _ScintillaObject *sci, const gchar *text);
void (*sci_insert_text) (struct _ScintillaObject *sci, gint pos, const gchar *text);
void (*sci_get_text) (struct _ScintillaObject *sci, gint len, gchar *text);
gint (*sci_get_length) (struct _ScintillaObject *sci);
gint (*sci_get_current_position) (struct _ScintillaObject *sci);
void (*sci_set_current_position) (struct _ScintillaObject *sci, gint position,
gboolean scroll_to_caret);
gint (*sci_get_col_from_position) (struct _ScintillaObject *sci, gint position);
gint (*sci_get_line_from_position) (struct _ScintillaObject *sci, gint position);
gint (*sci_get_position_from_line) (struct _ScintillaObject *sci, gint line);
void (*sci_replace_sel) (struct _ScintillaObject *sci, const gchar *text);
void (*sci_get_selected_text) (struct _ScintillaObject *sci, gchar *text);
gint (*sci_get_selected_text_length) (struct _ScintillaObject *sci);
gint (*sci_get_selection_start) (struct _ScintillaObject *sci);
gint (*sci_get_selection_end) (struct _ScintillaObject *sci);
gint (*sci_get_selection_mode) (struct _ScintillaObject *sci);
void (*sci_set_selection_mode) (struct _ScintillaObject *sci, gint mode);
void (*sci_set_selection_start) (struct _ScintillaObject *sci, gint position);
void (*sci_set_selection_end) (struct _ScintillaObject *sci, gint position);
void (*sci_get_text_range) (struct _ScintillaObject *sci, gint start, gint end, gchar *text);
gchar* (*sci_get_line) (struct _ScintillaObject *sci, gint line_num);
gint (*sci_get_line_length) (struct _ScintillaObject *sci, gint line);
gint (*sci_get_line_count) (struct _ScintillaObject *sci);
gboolean (*sci_get_line_is_visible) (struct _ScintillaObject *sci, gint line);
void (*sci_ensure_line_is_visible) (struct _ScintillaObject *sci, gint line);
void (*sci_scroll_caret) (struct _ScintillaObject *sci);
gint (*sci_find_matching_brace) (struct _ScintillaObject *sci, gint pos);
gint (*sci_get_style_at) (struct _ScintillaObject *sci, gint position);
gchar (*sci_get_char_at) (struct _ScintillaObject *sci, gint pos);
gint (*sci_get_current_line) (struct _ScintillaObject *sci);
gboolean (*sci_has_selection) (struct _ScintillaObject *sci);
gint (*sci_get_tab_width) (struct _ScintillaObject *sci);
void (*sci_indicator_clear) (struct _ScintillaObject *sci, gint start, gint end);
void (*sci_indicator_set) (struct _ScintillaObject *sci, gint indic);
gchar* (*sci_get_contents) (struct _ScintillaObject *sci, gint len);
gchar* (*sci_get_contents_range) (struct _ScintillaObject *sci, gint start, gint end);
gchar* (*sci_get_selection_contents) (struct _ScintillaObject *sci);
void (*sci_set_font) (struct _ScintillaObject *sci, gint style, const gchar *font, gint size);
gint (*sci_get_line_end_position) (struct _ScintillaObject *sci, gint line);
void (*sci_set_target_start) (struct _ScintillaObject *sci, gint start);
void (*sci_set_target_end) (struct _ScintillaObject *sci, gint end);
gint (*sci_replace_target) (struct _ScintillaObject *sci, const gchar *text, gboolean regex);
void (*sci_set_marker_at_line) (struct _ScintillaObject *sci, gint line_number, gint marker);
void (*sci_delete_marker_at_line) (struct _ScintillaObject *sci, gint line_number, gint marker);
gboolean (*sci_is_marker_set_at_line) (struct _ScintillaObject *sci, gint line, gint marker);
void (*sci_goto_line) (struct _ScintillaObject *sci, gint line, gboolean unfold);
gint (*sci_find_text) (struct _ScintillaObject *sci, gint flags, struct Sci_TextToFind *ttf);
void (*sci_set_line_indentation) (struct _ScintillaObject *sci, gint line, gint indent);
gint (*sci_get_line_indentation) (struct _ScintillaObject *sci, gint line);
gint (*sci_get_lexer) (struct _ScintillaObject *sci);
}
SciFuncs;
/* See templates.h */
typedef struct TemplateFuncs
{
gchar* (*templates_get_template_fileheader) (gint filetype_idx, const gchar *fname);
}
TemplateFuncs;
/* See utils.h */
typedef struct UtilsFuncs
{
gboolean (*utils_str_equal) (const gchar *a, const gchar *b);
guint (*utils_string_replace_all) (GString *haystack, const gchar *needle,
const gchar *replacement);
GSList* (*utils_get_file_list) (const gchar *path, guint *length, GError **error);
gint (*utils_write_file) (const gchar *filename, const gchar *text);
gchar* (*utils_get_locale_from_utf8) (const gchar *utf8_text);
gchar* (*utils_get_utf8_from_locale) (const gchar *locale_text);
gchar* (*utils_remove_ext_from_filename) (const gchar *filename);
gint (*utils_mkdir) (const gchar *path, gboolean create_parent_dirs);
gboolean (*utils_get_setting_boolean) (GKeyFile *config, const gchar *section, const gchar *key,
const gboolean default_value);
gint (*utils_get_setting_integer) (GKeyFile *config, const gchar *section, const gchar *key,
const gint default_value);
gchar* (*utils_get_setting_string) (GKeyFile *config, const gchar *section, const gchar *key,
const gchar *default_value);
gboolean (*utils_spawn_sync) (const gchar *dir, gchar **argv, gchar **env, GSpawnFlags flags,
GSpawnChildSetupFunc child_setup, gpointer user_data, gchar **std_out,
gchar **std_err, gint *exit_status, GError **error);
gboolean (*utils_spawn_async) (const gchar *dir, gchar **argv, gchar **env, GSpawnFlags flags,
GSpawnChildSetupFunc child_setup, gpointer user_data, GPid *child_pid,
GError **error);
gint (*utils_str_casecmp) (const gchar *s1, const gchar *s2);
gchar* (*utils_get_date_time) (const gchar *format, time_t *time_to_use);
void (*utils_open_browser) (const gchar *uri);
guint (*utils_string_replace_first) (GString *haystack, const gchar *needle,
const gchar *replace);
gchar* (*utils_str_middle_truncate) (const gchar *string, guint truncate_length);
gchar* (*utils_str_remove_chars) (gchar *string, const gchar *chars);
GSList* (*utils_get_file_list_full)(const gchar *path, gboolean full_path, gboolean sort,
GError **error);
gchar** (*utils_copy_environment)(const gchar **exclude_vars, const gchar *first_varname, ...);
gchar* (*utils_find_open_xml_tag) (const gchar sel[], gint size);
const gchar* (*utils_find_open_xml_tag_pos) (const gchar sel[], gint size);
}
UtilsFuncs;
/* See main.h */
typedef struct MainFuncs
{
void (*main_reload_configuration) (void);
void (*main_locale_init) (const gchar *locale_dir, const gchar *package);
gboolean (*main_is_realized) (void);
}
MainFuncs;
/* See ui_utils.h */
typedef struct UIUtilsFuncs
{
GtkWidget* (*ui_dialog_vbox_new) (GtkDialog *dialog);
GtkWidget* (*ui_frame_new_with_alignment) (const gchar *label_text, GtkWidget **alignment);
void (*ui_set_statusbar) (gboolean log, const gchar *format, ...) G_GNUC_PRINTF (2, 3);
void (*ui_table_add_row) (GtkTable *table, gint row, ...) G_GNUC_NULL_TERMINATED;
GtkWidget* (*ui_path_box_new) (const gchar *title, GtkFileChooserAction action, GtkEntry *entry);
GtkWidget* (*ui_button_new_with_image) (const gchar *stock_id, const gchar *text);
void (*ui_add_document_sensitive) (GtkWidget *widget);
void (*ui_widget_set_tooltip_text) (GtkWidget *widget, const gchar *text);
GtkWidget* (*ui_image_menu_item_new) (const gchar *stock_id, const gchar *label);
GtkWidget* (*ui_lookup_widget) (GtkWidget *widget, const gchar *widget_name);
void (*ui_progress_bar_start) (const gchar *text);
void (*ui_progress_bar_stop) (void);
void (*ui_entry_add_clear_icon) (GtkEntry *entry);
void (*ui_menu_add_document_items) (GtkMenu *menu, struct GeanyDocument *active,
GCallback callback);
void (*ui_widget_modify_font_from_string) (GtkWidget *widget, const gchar *str);
gboolean (*ui_is_keyval_enter_or_return) (guint keyval);
gint (*ui_get_gtk_settings_integer) (const gchar *property_name, gint default_value);
void (*ui_combo_box_add_to_history) (GtkComboBoxText *combo_entry,
const gchar *text, gint history_len);
void (*ui_menu_add_document_items_sorted) (GtkMenu *menu, struct GeanyDocument *active,
GCallback callback, GCompareFunc compare_func);
const gchar* (*ui_lookup_stock_label)(const gchar *stock_id);
void (*ui_tree_view_set_tooltip_text_column) (GtkTreeView *tree_view, gint column);
}
UIUtilsFuncs;
/* See dialogs.h */
typedef struct DialogFuncs
{
gboolean (*dialogs_show_question) (const gchar *text, ...) G_GNUC_PRINTF (1, 2);
void (*dialogs_show_msgbox) (GtkMessageType type, const gchar *text, ...) G_GNUC_PRINTF (2, 3);
gboolean (*dialogs_show_save_as) (void);
gboolean (*dialogs_show_input_numeric) (const gchar *title, const gchar *label_text,
gdouble *value, gdouble min, gdouble max, gdouble step);
gchar* (*dialogs_show_input)(const gchar *title, GtkWindow *parent, const gchar *label_text,
const gchar *default_text);
}
DialogFuncs;
/* @deprecated Use ui_lookup_widget() instead. */
typedef struct SupportFuncs
{
GtkWidget* (*support_lookup_widget) (GtkWidget *widget, const gchar *widget_name);
}
SupportFuncs;
/* See msgwindow.h */
typedef struct MsgWinFuncs
{
/* status_add() does not set the status bar - use ui->set_statusbar() instead. */
void (*msgwin_status_add) (const gchar *format, ...) G_GNUC_PRINTF (1, 2);
void (*msgwin_compiler_add) (gint msg_color, const gchar *format, ...) G_GNUC_PRINTF (2, 3);
void (*msgwin_msg_add) (gint msg_color, gint line, struct GeanyDocument *doc,
const gchar *format, ...) G_GNUC_PRINTF (4, 5);
void (*msgwin_clear_tab) (gint tabnum);
void (*msgwin_switch_tab) (gint tabnum, gboolean show);
void (*msgwin_set_messages_dir) (const gchar *messages_dir);
}
MsgWinFuncs;
/* See encodings.h */
typedef struct EncodingFuncs
{
gchar* (*encodings_convert_to_utf8) (const gchar *buffer, gssize size, gchar **used_encoding);
gchar* (*encodings_convert_to_utf8_from_charset) (const gchar *buffer, gssize size,
const gchar *charset, gboolean fast);
const gchar* (*encodings_get_charset_from_index) (gint idx);
}
EncodingFuncs;
struct GeanyKeyGroup;
/* avoid including keybindings.h */
typedef void (*_GeanyKeyCallback) (guint key_id);
/* See keybindings.h */
typedef struct KeybindingFuncs
{
void (*keybindings_send_command) (guint group_id, guint key_id);
struct GeanyKeyBinding* (*keybindings_set_item) (struct GeanyKeyGroup *group, gsize key_id,
_GeanyKeyCallback callback, guint key, GdkModifierType mod,
const gchar *name, const gchar *label, GtkWidget *menu_item);
struct GeanyKeyBinding* (*keybindings_get_item)(struct GeanyKeyGroup *group, gsize key_id);
GdkModifierType (*keybindings_get_modifiers)(GdkModifierType mods);
}
KeybindingFuncs;
/* See highlighting.h */
typedef struct HighlightingFuncs
{
const struct GeanyLexerStyle* (*highlighting_get_style) (gint ft_id, gint style_id);
void (*highlighting_set_styles) (struct _ScintillaObject *sci, struct GeanyFiletype *ft);
gboolean (*highlighting_is_string_style) (gint lexer, gint style);
gboolean (*highlighting_is_comment_style) (gint lexer, gint style);
gboolean (*highlighting_is_code_style) (gint lexer, gint style);
}
HighlightingFuncs;
/* See filetypes.h */
typedef struct FiletypeFuncs
{
GeanyFiletype* (*filetypes_detect_from_file) (const gchar *utf8_filename);
GeanyFiletype* (*filetypes_lookup_by_name) (const gchar *name);
GeanyFiletype* (*filetypes_index)(gint idx);
const gchar* (*filetypes_get_display_name)(GeanyFiletype *ft);
const GSList* (*filetypes_get_sorted_by_name)(void);
/* Remember to convert any filetype_id arguments to GeanyFiletype pointers in any
* appended functions */
}
FiletypeFuncs;
/* See search.h */
typedef struct SearchFuncs
{
void (*search_show_find_in_files_dialog) (const gchar *dir);
}
SearchFuncs;
/* See tagmanager/include */
typedef struct TagManagerFuncs
{
gchar* (*tm_get_real_path) (const gchar *file_name);
TMSourceFile* (*tm_source_file_new) (const char *file_name, const char *name);
void (*tm_source_file_free) (TMSourceFile *source_file);
void (*tm_workspace_add_source_file) (TMSourceFile *source_file);
void (*tm_workspace_remove_source_file) (TMSourceFile *source_file);
void (*tm_workspace_add_source_files) (GPtrArray *source_files);
void (*tm_workspace_remove_source_files) (GPtrArray *source_files);
}
TagManagerFuncs;
/* See navqueue.h */
typedef struct NavQueueFuncs
{
gboolean (*navqueue_goto_line) (struct GeanyDocument *old_doc, struct GeanyDocument *new_doc,
gint line);
}
NavQueueFuncs;
struct GeanyEditor;
/* See editor.h */
typedef struct EditorFuncs
{
const struct GeanyIndentPrefs* (*editor_get_indent_prefs)(struct GeanyEditor *editor);
struct _ScintillaObject* (*editor_create_widget)(struct GeanyEditor *editor);
void (*editor_indicator_set_on_range) (struct GeanyEditor *editor, gint indic, gint start, gint end);
void (*editor_indicator_set_on_line) (struct GeanyEditor *editor, gint indic, gint line);
void (*editor_indicator_clear) (struct GeanyEditor *editor, gint indic);
void (*editor_set_indent_type)(struct GeanyEditor *editor, GeanyIndentType type);
gchar* (*editor_get_word_at_pos) (struct GeanyEditor *editor, gint pos, const gchar *wordchars);
const gchar* (*editor_get_eol_char_name) (struct GeanyEditor *editor);
gint (*editor_get_eol_char_len) (struct GeanyEditor *editor);
const gchar* (*editor_get_eol_char) (struct GeanyEditor *editor);
void (*editor_insert_text_block) (struct GeanyEditor *editor, const gchar *text,
gint insert_pos, gint cursor_index, gint newline_indent_size,
gboolean replace_newlines);
gint (*editor_get_eol_char_mode) (struct GeanyEditor *editor);
gboolean (*editor_goto_pos) (struct GeanyEditor *editor, gint pos, gboolean mark);
const gchar* (*editor_find_snippet) (struct GeanyEditor *editor, const gchar *snippet_name);
void (*editor_insert_snippet) (struct GeanyEditor *editor, gint pos, const gchar *snippet);
}
EditorFuncs;
/* avoid including keybindings.h */
typedef gboolean (*_GeanyKeyGroupCallback) (guint key_id);
/* See pluginutils.c */
typedef struct PluginFuncs
{
void (*plugin_add_toolbar_item)(GeanyPlugin *plugin, GtkToolItem *item);
void (*plugin_module_make_resident) (GeanyPlugin *plugin);
void (*plugin_signal_connect) (GeanyPlugin *plugin,
GObject *object, const gchar *signal_name, gboolean after,
GCallback callback, gpointer user_data);
struct GeanyKeyGroup* (*plugin_set_key_group)(GeanyPlugin *plugin,
const gchar *section_name, gsize count, _GeanyKeyGroupCallback callback);
void (*plugin_show_configure)(GeanyPlugin *plugin);
guint (*plugin_timeout_add) (GeanyPlugin *plugin, guint interval, GSourceFunc function,
gpointer data);
guint (*plugin_timeout_add_seconds) (GeanyPlugin *plugin, guint interval,
GSourceFunc function, gpointer data);
guint (*plugin_idle_add) (GeanyPlugin *plugin, GSourceFunc function, gpointer data);
void (*plugin_builder_connect_signals) (GeanyPlugin *plugin, GtkBuilder *builder, gpointer user_data);
}
PluginFuncs;
struct StashGroup;
/* See stash.h */
typedef struct StashFuncs
{
struct StashGroup *(*stash_group_new)(const gchar *name);
void (*stash_group_add_boolean)(struct StashGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value);
void (*stash_group_add_integer)(struct StashGroup *group, gint *setting,
const gchar *key_name, gint default_value);
void (*stash_group_add_string)(struct StashGroup *group, gchar **setting,
const gchar *key_name, const gchar *default_value);
void (*stash_group_add_string_vector)(struct StashGroup *group, gchar ***setting,
const gchar *key_name, const gchar **default_value);
void (*stash_group_load_from_key_file)(struct StashGroup *group, GKeyFile *keyfile);
void (*stash_group_save_to_key_file)(struct StashGroup *group, GKeyFile *keyfile);
void (*stash_group_free)(struct StashGroup *group);
gboolean (*stash_group_load_from_file)(struct StashGroup *group, const gchar *filename);
gint (*stash_group_save_to_file)(struct StashGroup *group, const gchar *filename,
GKeyFileFlags flags);
void (*stash_group_add_toggle_button)(struct StashGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value, gconstpointer widget_id);
void (*stash_group_add_radio_buttons)(struct StashGroup *group, gint *setting,
const gchar *key_name, gint default_value,
gconstpointer widget_id, gint enum_id, ...) G_GNUC_NULL_TERMINATED;
void (*stash_group_add_spin_button_integer)(struct StashGroup *group, gint *setting,
const gchar *key_name, gint default_value, gconstpointer widget_id);
void (*stash_group_add_combo_box)(struct StashGroup *group, gint *setting,
const gchar *key_name, gint default_value, gconstpointer widget_id);
void (*stash_group_add_combo_box_entry)(struct StashGroup *group, gchar **setting,
const gchar *key_name, const gchar *default_value, gconstpointer widget_id);
void (*stash_group_add_entry)(struct StashGroup *group, gchar **setting,
const gchar *key_name, const gchar *default_value, gconstpointer widget_id);
void (*stash_group_add_widget_property)(struct StashGroup *group, gpointer setting,
const gchar *key_name, gpointer default_value, gconstpointer widget_id,
const gchar *property_name, GType type);
void (*stash_group_display)(struct StashGroup *group, GtkWidget *owner);
void (*stash_group_update)(struct StashGroup *group, GtkWidget *owner);
void (*stash_group_free_settings)(struct StashGroup *group);
}
StashFuncs;
/* See symbols.h */
typedef struct SymbolsFuncs
{
const gchar* (*symbols_get_context_separator)(gint ft_id);
}
SymbolsFuncs;
/* See build.h */
typedef struct BuildFuncs
{
void (*build_activate_menu_item)(const GeanyBuildGroup grp, const guint cmd);
const gchar *(*build_get_current_menu_item)(const GeanyBuildGroup grp, const guint cmd,
const GeanyBuildCmdEntries field);
void (*build_remove_menu_item)(const GeanyBuildSource src, const GeanyBuildGroup grp,
const gint cmd);
void (*build_set_menu_item)(const GeanyBuildSource src, const GeanyBuildGroup grp,
const guint cmd, const GeanyBuildCmdEntries field, const gchar *value);
guint (*build_get_group_count)(const GeanyBuildGroup grp);
}
BuildFuncs;
/* See project.h */
typedef struct ProjectFuncs
{
void (*project_write_config)(void);
}
ProjectFuncs;
/* Deprecated aliases */
#ifndef GEANY_DISABLE_DEPRECATED
/* This remains so that older plugins that contain a `GeanyFunctions *geany_functions;`
* variable in their plugin - as was previously required - will still compile
* without changes. */
typedef struct GeanyFunctionsUndefined GeanyFunctions;
#define document_reload_file document_reload_force
/** @deprecated - copy into your plugin code if needed.

View File

@ -75,326 +75,6 @@ static GtkWidget *menu_separator = NULL;
static gchar *get_plugin_path(void);
static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data);
static PluginFuncs plugin_funcs = {
&plugin_add_toolbar_item,
&plugin_module_make_resident,
&plugin_signal_connect,
&plugin_set_key_group,
&plugin_show_configure,
&plugin_timeout_add,
&plugin_timeout_add_seconds,
&plugin_idle_add,
&plugin_builder_connect_signals
};
static DocumentFuncs doc_funcs = {
&document_new_file,
&document_get_current,
&document_get_from_page,
&document_find_by_filename,
&document_find_by_real_path,
&document_save_file,
&document_open_file,
&document_open_files,
&document_remove_page,
&document_reload_force,
&document_set_encoding,
&document_set_text_changed,
&document_set_filetype,
&document_close,
&document_index,
&document_save_file_as,
&document_rename_file,
&document_get_status_color,
&document_get_basename_for_display,
&document_get_notebook_page,
&document_compare_by_display_name,
&document_compare_by_tab_order,
&document_compare_by_tab_order_reverse,
&document_find_by_id
};
static EditorFuncs editor_funcs = {
&editor_get_indent_prefs,
&editor_create_widget,
&editor_indicator_set_on_range,
&editor_indicator_set_on_line,
&editor_indicator_clear,
&editor_set_indent_type,
&editor_get_word_at_pos,
&editor_get_eol_char_name,
&editor_get_eol_char_len,
&editor_get_eol_char,
&editor_insert_text_block,
&editor_get_eol_char_mode,
&editor_goto_pos,
&editor_find_snippet,
&editor_insert_snippet
};
static ScintillaFuncs scintilla_funcs = {
&scintilla_send_message,
&scintilla_new
};
/* Macro to prevent a duplicate macro being generated in geanyfunctions.h */
#define _scintilla_send_message_macro scintilla_send_message
static SciFuncs sci_funcs = {
&_scintilla_send_message_macro,
&sci_send_command,
&sci_start_undo_action,
&sci_end_undo_action,
&sci_set_text,
&sci_insert_text,
&sci_get_text,
&sci_get_length,
&sci_get_current_position,
&sci_set_current_position,
&sci_get_col_from_position,
&sci_get_line_from_position,
&sci_get_position_from_line,
&sci_replace_sel,
&sci_get_selected_text,
&sci_get_selected_text_length,
&sci_get_selection_start,
&sci_get_selection_end,
&sci_get_selection_mode,
&sci_set_selection_mode,
&sci_set_selection_start,
&sci_set_selection_end,
&sci_get_text_range,
&sci_get_line,
&sci_get_line_length,
&sci_get_line_count,
&sci_get_line_is_visible,
&sci_ensure_line_is_visible,
&sci_scroll_caret,
&sci_find_matching_brace,
&sci_get_style_at,
&sci_get_char_at,
&sci_get_current_line,
&sci_has_selection,
&sci_get_tab_width,
&sci_indicator_clear,
&sci_indicator_set,
&sci_get_contents,
&sci_get_contents_range,
&sci_get_selection_contents,
&sci_set_font,
&sci_get_line_end_position,
&sci_set_target_start,
&sci_set_target_end,
&sci_replace_target,
&sci_set_marker_at_line,
&sci_delete_marker_at_line,
&sci_is_marker_set_at_line,
&sci_goto_line,
&sci_find_text,
&sci_set_line_indentation,
&sci_get_line_indentation,
&sci_get_lexer
};
static TemplateFuncs template_funcs = {
&templates_get_template_fileheader
};
static UtilsFuncs utils_funcs = {
&utils_str_equal,
&utils_string_replace_all,
&utils_get_file_list,
&utils_write_file,
&utils_get_locale_from_utf8,
&utils_get_utf8_from_locale,
&utils_remove_ext_from_filename,
&utils_mkdir,
&utils_get_setting_boolean,
&utils_get_setting_integer,
&utils_get_setting_string,
&utils_spawn_sync,
&utils_spawn_async,
&utils_str_casecmp,
&utils_get_date_time,
&utils_open_browser,
&utils_string_replace_first,
&utils_str_middle_truncate,
&utils_str_remove_chars,
&utils_get_file_list_full,
&utils_copy_environment,
&utils_find_open_xml_tag,
&utils_find_open_xml_tag_pos
};
static UIUtilsFuncs uiutils_funcs = {
&ui_dialog_vbox_new,
&ui_frame_new_with_alignment,
&ui_set_statusbar,
&ui_table_add_row,
&ui_path_box_new,
&ui_button_new_with_image,
&ui_add_document_sensitive,
&ui_widget_set_tooltip_text,
&ui_image_menu_item_new,
&ui_lookup_widget,
&ui_progress_bar_start,
&ui_progress_bar_stop,
&ui_entry_add_clear_icon,
&ui_menu_add_document_items,
&ui_widget_modify_font_from_string,
&ui_is_keyval_enter_or_return,
&ui_get_gtk_settings_integer,
&ui_combo_box_add_to_history,
&ui_menu_add_document_items_sorted,
&ui_lookup_stock_label,
&ui_tree_view_set_tooltip_text_column
};
static DialogFuncs dialog_funcs = {
&dialogs_show_question,
&dialogs_show_msgbox,
&dialogs_show_save_as,
&dialogs_show_input_numeric,
&dialogs_show_input
};
/* Macro to prevent confusing macro being generated in geanyfunctions.h */
#define _lookup_widget_macro ui_lookup_widget
/* deprecated */
static SupportFuncs support_funcs = {
&_lookup_widget_macro
};
static MsgWinFuncs msgwin_funcs = {
&msgwin_status_add,
&msgwin_compiler_add,
&msgwin_msg_add,
&msgwin_clear_tab,
&msgwin_switch_tab,
&msgwin_set_messages_dir
};
static EncodingFuncs encoding_funcs = {
&encodings_convert_to_utf8,
&encodings_convert_to_utf8_from_charset,
&encodings_get_charset_from_index
};
static KeybindingFuncs keybindings_funcs = {
&keybindings_send_command,
&keybindings_set_item,
&keybindings_get_item,
&keybindings_get_modifiers
};
static TagManagerFuncs tagmanager_funcs = {
&tm_get_real_path,
&tm_source_file_new,
&tm_source_file_free,
&tm_workspace_add_source_file,
&tm_workspace_remove_source_file,
&tm_workspace_add_source_files,
&tm_workspace_remove_source_files
};
static SearchFuncs search_funcs = {
&search_show_find_in_files_dialog
};
static HighlightingFuncs highlighting_funcs = {
&highlighting_get_style,
&highlighting_set_styles,
&highlighting_is_string_style,
&highlighting_is_comment_style,
&highlighting_is_code_style
};
static FiletypeFuncs filetype_funcs = {
&filetypes_detect_from_file,
&filetypes_lookup_by_name,
&filetypes_index,
&filetypes_get_display_name,
&filetypes_get_sorted_by_name
};
static NavQueueFuncs navqueue_funcs = {
&navqueue_goto_line
};
static MainFuncs main_funcs = {
&main_reload_configuration,
&main_locale_init,
&main_is_realized
};
static StashFuncs stash_funcs = {
&stash_group_new,
&stash_group_add_boolean,
&stash_group_add_integer,
&stash_group_add_string,
&stash_group_add_string_vector,
&stash_group_load_from_key_file,
&stash_group_save_to_key_file,
&stash_group_free,
&stash_group_load_from_file,
&stash_group_save_to_file,
&stash_group_add_toggle_button,
&stash_group_add_radio_buttons,
&stash_group_add_spin_button_integer,
&stash_group_add_combo_box,
&stash_group_add_combo_box_entry,
&stash_group_add_entry,
&stash_group_add_widget_property,
&stash_group_display,
&stash_group_update,
&stash_group_free_settings
};
static SymbolsFuncs symbols_funcs = {
&symbols_get_context_separator
};
static BuildFuncs build_funcs = {
&build_activate_menu_item,
&build_get_current_menu_item,
&build_remove_menu_item,
&build_set_menu_item,
&build_get_group_count
};
static ProjectFuncs project_funcs = {
&project_write_config
};
static GeanyFunctions geany_functions = {
&doc_funcs,
&sci_funcs,
&template_funcs,
&utils_funcs,
&uiutils_funcs,
&support_funcs,
&dialog_funcs,
&msgwin_funcs,
&encoding_funcs,
&keybindings_funcs,
&tagmanager_funcs,
&search_funcs,
&highlighting_funcs,
&filetype_funcs,
&navqueue_funcs,
&editor_funcs,
&main_funcs,
&plugin_funcs,
&scintilla_funcs,
&msgwin_funcs,
&stash_funcs,
&symbols_funcs,
&build_funcs,
&project_funcs
};
static GeanyData geany_data;
@ -598,7 +278,7 @@ plugin_load(Plugin *plugin)
PluginFields **plugin_fields;
/* set these symbols before plugin_init() is called
* we don't set geany_functions and geany_data since they are set directly by plugin_new() */
* we don't set geany_data since it is set directly by plugin_new() */
g_module_symbol(plugin->module, "geany_plugin", (void *) &p_geany_plugin);
if (p_geany_plugin)
*p_geany_plugin = &plugin->public;
@ -663,7 +343,6 @@ plugin_new(const gchar *fname, gboolean load_plugin, gboolean add_to_list)
Plugin *plugin;
GModule *module;
GeanyData **p_geany_data;
GeanyFunctions **p_geany_functions;
void (*plugin_set_info)(PluginInfo*);
g_return_val_if_fail(fname, NULL);
@ -731,9 +410,6 @@ plugin_new(const gchar *fname, gboolean load_plugin, gboolean add_to_list)
g_module_symbol(module, "geany_data", (void *) &p_geany_data);
if (p_geany_data)
*p_geany_data = &geany_data;
g_module_symbol(module, "geany_functions", (void *) &p_geany_functions);
if (p_geany_functions)
*p_geany_functions = &geany_functions;
/* read plugin name, etc. */
plugin_set_info(&plugin->info);

View File

@ -48,6 +48,7 @@
* @note You should still destroy @a item yourself, usually in @ref plugin_cleanup().
* @param plugin Must be @ref geany_plugin.
* @param item The item to add. */
GEANY_API_SYMBOL
void plugin_add_toolbar_item(GeanyPlugin *plugin, GtkToolItem *item)
{
GtkToolbar *toolbar = GTK_TOOLBAR(main_widgets.toolbar);
@ -91,6 +92,7 @@ void plugin_add_toolbar_item(GeanyPlugin *plugin, GtkToolItem *item)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void plugin_module_make_resident(GeanyPlugin *plugin)
{
g_return_if_fail(plugin);
@ -126,6 +128,7 @@ void plugin_module_make_resident(GeanyPlugin *plugin)
* @note Since version 1.25 (API >= 218), the object lifetime is watched and so the above
* restriction does not apply. However, for objects destroyed by the plugin,
* @c g_signal_connect() is safe and has lower overhead. */
GEANY_API_SYMBOL
void plugin_signal_connect(GeanyPlugin *plugin,
GObject *object, const gchar *signal_name, gboolean after,
GCallback callback, gpointer user_data)
@ -238,6 +241,7 @@ static guint plugin_source_add(GeanyPlugin *plugin, GSource *source, GSourceFunc
* @see g_timeout_add()
* @since 0.21, plugin API 205.
*/
GEANY_API_SYMBOL
guint plugin_timeout_add(GeanyPlugin *plugin, guint interval, GSourceFunc function, gpointer data)
{
return plugin_source_add(plugin, g_timeout_source_new(interval), function, data);
@ -257,6 +261,7 @@ guint plugin_timeout_add(GeanyPlugin *plugin, guint interval, GSourceFunc functi
* @see g_timeout_add_seconds()
* @since 0.21, plugin API 205.
*/
GEANY_API_SYMBOL
guint plugin_timeout_add_seconds(GeanyPlugin *plugin, guint interval, GSourceFunc function,
gpointer data)
{
@ -276,6 +281,7 @@ guint plugin_timeout_add_seconds(GeanyPlugin *plugin, guint interval, GSourceFun
* @see g_idle_add()
* @since 0.21, plugin API 205.
*/
GEANY_API_SYMBOL
guint plugin_idle_add(GeanyPlugin *plugin, GSourceFunc function, gpointer data)
{
return plugin_source_add(plugin, g_idle_source_new(), function, data);
@ -290,6 +296,7 @@ guint plugin_idle_add(GeanyPlugin *plugin, GSourceFunc function, gpointer data)
* @param callback Group callback, or @c NULL if you only want individual keybinding callbacks.
* @return The plugin's keybinding group.
* @since 0.19. */
GEANY_API_SYMBOL
GeanyKeyGroup *plugin_set_key_group(GeanyPlugin *plugin,
const gchar *section_name, gsize count, GeanyKeyGroupCallback callback)
{
@ -402,6 +409,7 @@ static void configure_plugins(Plugin *current_plugin)
* @param plugin Must be @ref geany_plugin.
* @since 0.19. */
/* if NULL, show all plugins */
GEANY_API_SYMBOL
void plugin_show_configure(GeanyPlugin *plugin)
{
Plugin *p;
@ -489,6 +497,7 @@ static void connect_plugin_signals(GtkBuilder *builder, GObject *object,
*
* @since 1.24, plugin API 217.
*/
GEANY_API_SYMBOL
void plugin_builder_connect_signals(GeanyPlugin *plugin,
GtkBuilder *builder, gpointer user_data)
{

View File

@ -473,8 +473,7 @@ static void destroy_project(gboolean open_default)
/* Shows the file chooser dialog when base path button is clicked
* FIXME: this should be connected in Glade but 3.8.1 has a bug
* where it won't pass any objects as user data (#588824). */
G_MODULE_EXPORT void
on_project_properties_base_path_button_clicked(GtkWidget *button,
static void on_project_properties_base_path_button_clicked(GtkWidget *button,
GtkWidget *base_path_entry)
{
GtkWidget *dialog;
@ -1154,6 +1153,7 @@ static gboolean write_config(gboolean emit_signal)
*
* @since 1.25
*/
GEANY_API_SYMBOL
void project_write_config(void)
{
if (!write_config(TRUE))

View File

@ -44,6 +44,7 @@
#define SSM(s, m, w, l) scintilla_send_message(s, m, w, l)
/* line numbers visibility */
void sci_set_line_numbers(ScintillaObject *sci, gboolean set)
{
@ -181,6 +182,7 @@ void sci_add_text(ScintillaObject *sci, const gchar *text)
/** Sets all text.
* @param sci Scintilla widget.
* @param text Text. */
GEANY_API_SYMBOL
void sci_set_text(ScintillaObject *sci, const gchar *text)
{
if( text != NULL ){ /* if null text is passed to scintilla will segfault */
@ -218,6 +220,7 @@ void sci_redo(ScintillaObject *sci)
/** Begins grouping a set of edits together as one Undo action.
* You must call sci_end_undo_action() after making your edits.
* @param sci Scintilla @c GtkWidget. */
GEANY_API_SYMBOL
void sci_start_undo_action(ScintillaObject *sci)
{
SSM(sci, SCI_BEGINUNDOACTION, 0, 0);
@ -227,6 +230,7 @@ void sci_start_undo_action(ScintillaObject *sci)
/** Ends grouping a set of edits together as one Undo action.
* @param sci Scintilla @c GtkWidget.
* @see sci_start_undo_action(). */
GEANY_API_SYMBOL
void sci_end_undo_action(ScintillaObject *sci)
{
SSM(sci, SCI_ENDUNDOACTION, 0, 0);
@ -279,6 +283,7 @@ gint sci_get_zoom(ScintillaObject *sci)
* @param sci Scintilla widget.
* @param line_number Line number.
* @param marker Marker number. */
GEANY_API_SYMBOL
void sci_set_marker_at_line(ScintillaObject *sci, gint line_number, gint marker)
{
SSM(sci, SCI_MARKERADD, (uptr_t) line_number, marker);
@ -289,6 +294,7 @@ void sci_set_marker_at_line(ScintillaObject *sci, gint line_number, gint marker)
* @param sci Scintilla widget.
* @param line_number Line number.
* @param marker Marker number. */
GEANY_API_SYMBOL
void sci_delete_marker_at_line(ScintillaObject *sci, gint line_number, gint marker)
{
SSM(sci, SCI_MARKERDELETE, (uptr_t) line_number, marker);
@ -300,6 +306,7 @@ void sci_delete_marker_at_line(ScintillaObject *sci, gint line_number, gint mark
* @param line Line number.
* @param marker Marker number.
* @return Whether it's set. */
GEANY_API_SYMBOL
gboolean sci_is_marker_set_at_line(ScintillaObject *sci, gint line, gint marker)
{
gint state;
@ -357,6 +364,7 @@ gint sci_marker_previous(ScintillaObject *sci, gint line, gint marker_mask, gboo
* @param sci Scintilla widget.
* @param position Position.
* @return The line. */
GEANY_API_SYMBOL
gint sci_get_line_from_position(ScintillaObject *sci, gint position)
{
return (gint) SSM(sci, SCI_LINEFROMPOSITION, (uptr_t) position, 0);
@ -367,6 +375,7 @@ gint sci_get_line_from_position(ScintillaObject *sci, gint position)
* @param sci Scintilla widget.
* @param position Position.
* @return The column. */
GEANY_API_SYMBOL
gint sci_get_col_from_position(ScintillaObject *sci, gint position)
{
return (gint) SSM(sci, SCI_GETCOLUMN, (uptr_t) position, 0);
@ -383,6 +392,7 @@ gint sci_get_position_from_col(ScintillaObject *sci, gint line, gint col)
* @param sci Scintilla widget.
* @param line Line.
* @return Position. */
GEANY_API_SYMBOL
gint sci_get_position_from_line(ScintillaObject *sci, gint line)
{
return (gint) SSM(sci, SCI_POSITIONFROMLINE, (uptr_t) line, 0);
@ -392,6 +402,7 @@ gint sci_get_position_from_line(ScintillaObject *sci, gint line)
/** Gets the cursor position.
* @param sci Scintilla widget.
* @return Position. */
GEANY_API_SYMBOL
gint sci_get_current_position(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETCURRENTPOS, 0, 0);
@ -413,6 +424,7 @@ gint sci_get_cursor_virtual_space(ScintillaObject *sci)
* @param sci Scintilla widget.
* @param position Position.
* @param scroll_to_caret Whether to scroll the cursor in view. */
GEANY_API_SYMBOL
void sci_set_current_position(ScintillaObject *sci, gint position, gboolean scroll_to_caret)
{
if (scroll_to_caret)
@ -438,6 +450,7 @@ void sci_set_current_line(ScintillaObject *sci, gint line)
/** Gets the total number of lines.
* @param sci Scintilla widget.
* @return The line count. */
GEANY_API_SYMBOL
gint sci_get_line_count(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETLINECOUNT, 0, 0);
@ -447,6 +460,7 @@ gint sci_get_line_count(ScintillaObject *sci)
/** Sets the selection start position.
* @param sci Scintilla widget.
* @param position Position. */
GEANY_API_SYMBOL
void sci_set_selection_start(ScintillaObject *sci, gint position)
{
SSM(sci, SCI_SETSELECTIONSTART, (uptr_t) position, 0);
@ -456,6 +470,7 @@ void sci_set_selection_start(ScintillaObject *sci, gint position)
/** Sets the selection end position.
* @param sci Scintilla widget.
* @param position Position. */
GEANY_API_SYMBOL
void sci_set_selection_end(ScintillaObject *sci, gint position)
{
SSM(sci, SCI_SETSELECTIONEND, (uptr_t) position, 0);
@ -472,6 +487,7 @@ void sci_set_selection(ScintillaObject *sci, gint anchorPos, gint currentPos)
* @param sci Scintilla widget.
* @param line Line.
* @return The position at the end of the line. */
GEANY_API_SYMBOL
gint sci_get_line_end_position(ScintillaObject *sci, gint line)
{
return (gint) SSM(sci, SCI_GETLINEENDPOSITION, (uptr_t) line, 0);
@ -505,6 +521,7 @@ void sci_clear(ScintillaObject *sci)
/** Gets the selection start position.
* @param sci Scintilla widget.
* @return Position. */
GEANY_API_SYMBOL
gint sci_get_selection_start(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETSELECTIONSTART, 0, 0);
@ -514,6 +531,7 @@ gint sci_get_selection_start(ScintillaObject *sci)
/** Gets the selection end position.
* @param sci Scintilla widget.
* @return Position. */
GEANY_API_SYMBOL
gint sci_get_selection_end(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETSELECTIONEND, 0, 0);
@ -523,6 +541,7 @@ gint sci_get_selection_end(ScintillaObject *sci)
/** Replaces selection.
* @param sci Scintilla widget.
* @param text Text. */
GEANY_API_SYMBOL
void sci_replace_sel(ScintillaObject *sci, const gchar *text)
{
SSM(sci, SCI_REPLACESEL, 0, (sptr_t) text);
@ -532,6 +551,7 @@ void sci_replace_sel(ScintillaObject *sci, const gchar *text)
/** Gets the length of all text.
* @param sci Scintilla widget.
* @return Length. */
GEANY_API_SYMBOL
gint sci_get_length(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETLENGTH, 0, 0);
@ -542,6 +562,7 @@ gint sci_get_length(ScintillaObject *sci)
* @param sci Scintilla widget.
* @returns The lexer ID
*/
GEANY_API_SYMBOL
gint sci_get_lexer(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETLEXER, 0, 0);
@ -563,6 +584,7 @@ void sci_set_lexer(ScintillaObject *sci, guint lexer_id)
* @param sci Scintilla widget.
* @param line Line number.
* @return Length. */
GEANY_API_SYMBOL
gint sci_get_line_length(ScintillaObject *sci, gint line)
{
return (gint) SSM(sci, SCI_LINELENGTH, (uptr_t) line, 0);
@ -586,6 +608,7 @@ gchar *sci_get_string(ScintillaObject *sci, guint msg, gulong wParam)
* @param sci Scintilla widget.
* @param line_num Line number.
* @return A @c NULL-terminated copy of the line text. */
GEANY_API_SYMBOL
gchar *sci_get_line(ScintillaObject *sci, gint line_num)
{
return sci_get_string(sci, SCI_GETLINE, (gulong) line_num);
@ -599,6 +622,7 @@ gchar *sci_get_line(ScintillaObject *sci, gint line_num)
* @param sci Scintilla widget.
* @param len Length of @a text buffer, usually sci_get_length() + 1.
* @param text Text buffer; must be allocated @a len + 1 bytes for null-termination. */
GEANY_API_SYMBOL
void sci_get_text(ScintillaObject *sci, gint len, gchar *text)
{
SSM(sci, SCI_GETTEXT, (uptr_t) len, (sptr_t) text);
@ -614,6 +638,7 @@ void sci_get_text(ScintillaObject *sci, gint len, gchar *text)
*
* @since 1.23 (0.17)
*/
GEANY_API_SYMBOL
gchar *sci_get_contents(ScintillaObject *sci, gint buffer_len)
{
gchar *text;
@ -634,6 +659,7 @@ gchar *sci_get_contents(ScintillaObject *sci, gint buffer_len)
* @param sci Scintilla widget.
* @param text Text buffer; must be allocated sci_get_selected_text_length() + 1 bytes
* for null-termination. */
GEANY_API_SYMBOL
void sci_get_selected_text(ScintillaObject *sci, gchar *text)
{
SSM(sci, SCI_GETSELTEXT, 0, (sptr_t) text);
@ -647,6 +673,7 @@ void sci_get_selected_text(ScintillaObject *sci, gchar *text)
*
* @since 0.17
*/
GEANY_API_SYMBOL
gchar *sci_get_selection_contents(ScintillaObject *sci)
{
return sci_get_string(sci, SCI_GETSELTEXT, 0);
@ -656,6 +683,7 @@ gchar *sci_get_selection_contents(ScintillaObject *sci)
/** Gets selected text length.
* @param sci Scintilla widget.
* @return Length. */
GEANY_API_SYMBOL
gint sci_get_selected_text_length(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETSELTEXT, 0, 0);
@ -673,6 +701,7 @@ gint sci_get_position_from_xy(ScintillaObject *sci, gint x, gint y, gboolean nea
* @param sci Scintilla widget.
* @param line Line number.
* @return Whether @a line will be drawn on the screen. */
GEANY_API_SYMBOL
gboolean sci_get_line_is_visible(ScintillaObject *sci, gint line)
{
return SSM(sci, SCI_GETLINEVISIBLE, (uptr_t) line, 0) != FALSE;
@ -682,6 +711,7 @@ gboolean sci_get_line_is_visible(ScintillaObject *sci, gint line)
/** Makes @a line visible (folding may have hidden it).
* @param sci Scintilla widget.
* @param line Line number. */
GEANY_API_SYMBOL
void sci_ensure_line_is_visible(ScintillaObject *sci, gint line)
{
SSM(sci, SCI_ENSUREVISIBLE, (uptr_t) line, 0);
@ -743,6 +773,7 @@ void sci_set_tab_width(ScintillaObject *sci, gint width)
*
* @since 0.15
**/
GEANY_API_SYMBOL
gint sci_get_tab_width(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETTABWIDTH, 0, 0);
@ -753,6 +784,7 @@ gint sci_get_tab_width(ScintillaObject *sci)
* @param sci Scintilla widget.
* @param pos Position.
* @return Char. */
GEANY_API_SYMBOL
gchar sci_get_char_at(ScintillaObject *sci, gint pos)
{
return (gchar) SSM(sci, SCI_GETCHARAT, (uptr_t) pos, 0);
@ -783,6 +815,7 @@ void sci_use_popup(ScintillaObject *sci, gboolean enable)
*
* @since 0.15
**/
GEANY_API_SYMBOL
gboolean sci_has_selection(ScintillaObject *sci)
{
if (SSM(sci, SCI_GETSELECTIONEND, 0, 0) - SSM(sci, SCI_GETSELECTIONSTART, 0, 0))
@ -817,6 +850,7 @@ void sci_set_anchor(ScintillaObject *sci, gint pos)
/** Scrolls the cursor in view.
* @param sci Scintilla widget. */
GEANY_API_SYMBOL
void sci_scroll_caret(ScintillaObject *sci)
{
SSM(sci, SCI_SCROLLCARET, 0, 0);
@ -862,6 +896,7 @@ gint sci_search_prev(ScintillaObject *sci, gint flags, const gchar *text)
* The @c chrgText.cpMin and @c chrgText.cpMax members of @c TextToFind are filled in
* with the start and end positions of the found text.
*/
GEANY_API_SYMBOL
gint sci_find_text(ScintillaObject *sci, gint flags, struct Sci_TextToFind *ttf)
{
return (gint) SSM(sci, SCI_FINDTEXT, (uptr_t) flags, (sptr_t) ttf);
@ -873,6 +908,7 @@ gint sci_find_text(ScintillaObject *sci, gint flags, struct Sci_TextToFind *ttf)
* @param style The style.
* @param font The font name.
* @param size The font size. */
GEANY_API_SYMBOL
void sci_set_font(ScintillaObject *sci, gint style, const gchar *font, gint size)
{
SSM(sci, SCI_STYLESETFONT, (uptr_t) style, (sptr_t) font);
@ -887,6 +923,7 @@ void sci_set_font(ScintillaObject *sci, gint style, const gchar *font, gint size
* @param line Line.
* @param unfold Whether to unfold first.
*/
GEANY_API_SYMBOL
void sci_goto_line(ScintillaObject *sci, gint line, gboolean unfold)
{
if (unfold) SSM(sci, SCI_ENSUREVISIBLE, (uptr_t) line, 0);
@ -904,6 +941,7 @@ void sci_marker_delete_all(ScintillaObject *sci, gint marker)
* @param sci Scintilla widget.
* @param position Position.
* @return Style ID. */
GEANY_API_SYMBOL
gint sci_get_style_at(ScintillaObject *sci, gint position)
{
return (gint) SSM(sci, SCI_GETSTYLEAT, (uptr_t) position, 0);
@ -937,6 +975,7 @@ void sci_clear_cmdkey(ScintillaObject *sci, gint key)
* @param start Start.
* @param end End.
* @param text Text will be zero terminated and must be allocated (end - start + 1) bytes. */
GEANY_API_SYMBOL
void sci_get_text_range(ScintillaObject *sci, gint start, gint end, gchar *text)
{
struct Sci_TextRange tr;
@ -955,6 +994,7 @@ void sci_get_text_range(ScintillaObject *sci, gint start, gint end, gchar *text)
*
* @since 0.17
*/
GEANY_API_SYMBOL
gchar *sci_get_contents_range(ScintillaObject *sci, gint start, gint end)
{
gchar *text;
@ -983,6 +1023,7 @@ void sci_selection_duplicate(ScintillaObject *sci)
* @param sci Scintilla widget.
* @param pos Position, or -1 for current.
* @param text Text. */
GEANY_API_SYMBOL
void sci_insert_text(ScintillaObject *sci, gint pos, const gchar *text)
{
SSM(sci, SCI_INSERTTEXT, (uptr_t) pos, (sptr_t) text);
@ -995,18 +1036,21 @@ void sci_target_from_selection(ScintillaObject *sci)
}
GEANY_API_SYMBOL
void sci_set_target_start(ScintillaObject *sci, gint start)
{
SSM(sci, SCI_SETTARGETSTART, (uptr_t) start, 0);
}
GEANY_API_SYMBOL
void sci_set_target_end(ScintillaObject *sci, gint end)
{
SSM(sci, SCI_SETTARGETEND, (uptr_t) end, 0);
}
GEANY_API_SYMBOL
gint sci_replace_target(ScintillaObject *sci, const gchar *text, gboolean regex)
{
return (gint) SSM(sci, (regex) ? SCI_REPLACETARGETRE : SCI_REPLACETARGET, (uptr_t) -1, (sptr_t) text);
@ -1032,6 +1076,7 @@ void sci_set_readonly(ScintillaObject *sci, gboolean readonly)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void sci_send_command(ScintillaObject *sci, gint cmd)
{
SSM(sci, cmd, 0, 0);
@ -1041,6 +1086,7 @@ void sci_send_command(ScintillaObject *sci, gint cmd)
/** Gets current line number.
* @param sci Scintilla widget.
* @return Line number. */
GEANY_API_SYMBOL
gint sci_get_current_line(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_LINEFROMPOSITION, (uptr_t) SSM(sci, SCI_GETCURRENTPOS, 0, 0), 0);
@ -1084,6 +1130,7 @@ gint sci_get_first_visible_line(ScintillaObject *sci)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void sci_indicator_set(ScintillaObject *sci, gint indic)
{
SSM(sci, SCI_SETINDICATORCURRENT, (uptr_t) indic, 0);
@ -1108,6 +1155,7 @@ void sci_indicator_fill(ScintillaObject *sci, gint pos, gint len)
*
* @since 0.16
*/
GEANY_API_SYMBOL
void sci_indicator_clear(ScintillaObject *sci, gint pos, gint len)
{
SSM(sci, SCI_INDICATORCLEARRANGE, (uptr_t) pos, len);
@ -1139,6 +1187,7 @@ void sci_set_autoc_max_height(ScintillaObject *sci, gint val)
*
* @since 0.15
**/
GEANY_API_SYMBOL
gint sci_find_matching_brace(ScintillaObject *sci, gint pos)
{
return (gint) SSM(sci, SCI_BRACEMATCH, (uptr_t) pos, 0);
@ -1178,6 +1227,7 @@ gint sci_get_pos_at_line_sel_end(ScintillaObject *sci, gint line)
/** Gets selection mode.
* @param sci Scintilla widget.
* @return Selection mode. */
GEANY_API_SYMBOL
gint sci_get_selection_mode(ScintillaObject *sci)
{
return (gint) SSM(sci, SCI_GETSELECTIONMODE, 0, 0);
@ -1187,6 +1237,7 @@ gint sci_get_selection_mode(ScintillaObject *sci)
/** Sets selection mode.
* @param sci Scintilla widget.
* @param mode Mode. */
GEANY_API_SYMBOL
void sci_set_selection_mode(ScintillaObject *sci, gint mode)
{
SSM(sci, SCI_SETSELECTIONMODE, (uptr_t) mode, 0);
@ -1207,6 +1258,7 @@ void sci_set_scrollbar_mode(ScintillaObject *sci, gboolean visible)
*
* @since 0.19
*/
GEANY_API_SYMBOL
void sci_set_line_indentation(ScintillaObject *sci, gint line, gint indent)
{
SSM(sci, SCI_SETLINEINDENTATION, (uptr_t) line, indent);
@ -1220,6 +1272,7 @@ void sci_set_line_indentation(ScintillaObject *sci, gint line, gint indent)
*
* @since 0.19
*/
GEANY_API_SYMBOL
gint sci_get_line_indentation(ScintillaObject *sci, gint line)
{
return (gint) SSM(sci, SCI_GETLINEINDENTATION, (uptr_t) line, 0);

View File

@ -1034,6 +1034,7 @@ static void create_fif_dialog(void)
*
* @since 0.14, plugin API 53
*/
GEANY_API_SYMBOL
void search_show_find_in_files_dialog(const gchar *dir)
{
search_show_find_in_files_dialog_full(NULL, dir);

View File

@ -274,6 +274,7 @@ static void keyfile_action(SettingAction action, StashGroup *group, GKeyFile *ke
* so that all Stash settings are initialized to defaults.
* @param group .
* @param keyfile Usually loaded from a configuration file first. */
GEANY_API_SYMBOL
void stash_group_load_from_key_file(StashGroup *group, GKeyFile *keyfile)
{
keyfile_action(SETTING_READ, group, keyfile);
@ -284,6 +285,7 @@ void stash_group_load_from_key_file(StashGroup *group, GKeyFile *keyfile)
* @a keyfile is usually written to a configuration file afterwards.
* @param group .
* @param keyfile . */
GEANY_API_SYMBOL
void stash_group_save_to_key_file(StashGroup *group, GKeyFile *keyfile)
{
keyfile_action(SETTING_WRITE, group, keyfile);
@ -298,6 +300,7 @@ void stash_group_save_to_key_file(StashGroup *group, GKeyFile *keyfile)
* @return @c TRUE if a key file could be loaded.
* @see stash_group_load_from_key_file().
**/
GEANY_API_SYMBOL
gboolean stash_group_load_from_file(StashGroup *group, const gchar *filename)
{
GKeyFile *keyfile;
@ -322,6 +325,7 @@ gboolean stash_group_load_from_file(StashGroup *group, const gchar *filename)
* failed operation is returned.
* @see stash_group_save_to_key_file().
**/
GEANY_API_SYMBOL
gint stash_group_save_to_file(StashGroup *group, const gchar *filename,
GKeyFileFlags flags)
{
@ -346,6 +350,7 @@ gint stash_group_save_to_file(StashGroup *group, const gchar *filename,
/** Creates a new group.
* @param name Name used for @c GKeyFile group.
* @return Group. */
GEANY_API_SYMBOL
StashGroup *stash_group_new(const gchar *name)
{
StashGroup *group = g_new0(StashGroup, 1);
@ -361,6 +366,7 @@ StashGroup *stash_group_new(const gchar *name)
* Useful e.g. to avoid freeing strings individually.
* @note This is *not* called by stash_group_free().
* @param group . */
GEANY_API_SYMBOL
void stash_group_free_settings(StashGroup *group)
{
StashPref *entry;
@ -382,6 +388,7 @@ void stash_group_free_settings(StashGroup *group)
/** Frees a group.
* @param group . */
GEANY_API_SYMBOL
void stash_group_free(StashGroup *group)
{
StashPref *entry;
@ -442,6 +449,7 @@ add_pref(StashGroup *group, GType type, gpointer setting,
* @param setting Address of setting variable.
* @param key_name Name for key in a @c GKeyFile.
* @param default_value Value to use if the key doesn't exist when loading. */
GEANY_API_SYMBOL
void stash_group_add_boolean(StashGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value)
{
@ -454,6 +462,7 @@ void stash_group_add_boolean(StashGroup *group, gboolean *setting,
* @param setting Address of setting variable.
* @param key_name Name for key in a @c GKeyFile.
* @param default_value Value to use if the key doesn't exist when loading. */
GEANY_API_SYMBOL
void stash_group_add_integer(StashGroup *group, gint *setting,
const gchar *key_name, gint default_value)
{
@ -467,6 +476,7 @@ void stash_group_add_integer(StashGroup *group, gint *setting,
* @param setting Address of setting variable.
* @param key_name Name for key in a @c GKeyFile.
* @param default_value String to copy if the key doesn't exist when loading, or @c NULL. */
GEANY_API_SYMBOL
void stash_group_add_string(StashGroup *group, gchar **setting,
const gchar *key_name, const gchar *default_value)
{
@ -480,6 +490,7 @@ void stash_group_add_string(StashGroup *group, gchar **setting,
* @param setting Address of setting variable.
* @param key_name Name for key in a @c GKeyFile.
* @param default_value Vector to copy if the key doesn't exist when loading. Usually @c NULL. */
GEANY_API_SYMBOL
void stash_group_add_string_vector(StashGroup *group, gchar ***setting,
const gchar *key_name, const gchar **default_value)
{
@ -734,6 +745,7 @@ static void pref_action(PrefAction action, StashGroup *group, GtkWidget *owner)
* @param owner If non-NULL, used to lookup widgets by name, otherwise
* widget pointers are assumed.
* @see stash_group_update(). */
GEANY_API_SYMBOL
void stash_group_display(StashGroup *group, GtkWidget *owner)
{
pref_action(PREF_DISPLAY, group, owner);
@ -746,6 +758,7 @@ void stash_group_display(StashGroup *group, GtkWidget *owner)
* @param owner If non-NULL, used to lookup widgets by name, otherwise
* widget pointers are assumed.
* @see stash_group_display(). */
GEANY_API_SYMBOL
void stash_group_update(StashGroup *group, GtkWidget *owner)
{
pref_action(PREF_UPDATE, group, owner);
@ -773,6 +786,7 @@ add_widget_pref(StashGroup *group, GType setting_type, gpointer setting,
* @param default_value Value to use if the key doesn't exist when loading.
* @param widget_id @c GtkWidget pointer or string to lookup widget later.
* @see stash_group_add_radio_buttons(). */
GEANY_API_SYMBOL
void stash_group_add_toggle_button(StashGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value, StashWidgetID widget_id)
{
@ -795,6 +809,7 @@ void stash_group_add_toggle_button(StashGroup *group, gboolean *setting,
* stash_group_add_radio_buttons(group, &which_one_setting, "which_one", BAR,
* "radio_foo", FOO, "radio_bar", BAR, NULL);
* @endcode */
GEANY_API_SYMBOL
void stash_group_add_radio_buttons(StashGroup *group, gint *setting,
const gchar *key_name, gint default_value,
StashWidgetID widget_id, gint enum_id, ...)
@ -845,6 +860,7 @@ void stash_group_add_radio_buttons(StashGroup *group, gint *setting,
* @param key_name Name for key in a @c GKeyFile.
* @param default_value Value to use if the key doesn't exist when loading.
* @param widget_id @c GtkWidget pointer or string to lookup widget later. */
GEANY_API_SYMBOL
void stash_group_add_spin_button_integer(StashGroup *group, gint *setting,
const gchar *key_name, gint default_value, StashWidgetID widget_id)
{
@ -860,6 +876,7 @@ void stash_group_add_spin_button_integer(StashGroup *group, gint *setting,
* @param default_value Value to use if the key doesn't exist when loading.
* @param widget_id @c GtkWidget pointer or string to lookup widget later.
* @see stash_group_add_combo_box_entry(). */
GEANY_API_SYMBOL
void stash_group_add_combo_box(StashGroup *group, gint *setting,
const gchar *key_name, gint default_value, StashWidgetID widget_id)
{
@ -876,6 +893,7 @@ void stash_group_add_combo_box(StashGroup *group, gint *setting,
* @param widget_id @c GtkWidget pointer or string to lookup widget later. */
/* We could maybe also have something like stash_group_add_combo_box_entry_with_menu()
* for the history list - or should that be stored as a separate setting? */
GEANY_API_SYMBOL
void stash_group_add_combo_box_entry(StashGroup *group, gchar **setting,
const gchar *key_name, const gchar *default_value, StashWidgetID widget_id)
{
@ -890,6 +908,7 @@ void stash_group_add_combo_box_entry(StashGroup *group, gchar **setting,
* @param key_name Name for key in a @c GKeyFile.
* @param default_value Value to use if the key doesn't exist when loading.
* @param widget_id @c GtkWidget pointer or string to lookup widget later. */
GEANY_API_SYMBOL
void stash_group_add_entry(StashGroup *group, gchar **setting,
const gchar *key_name, const gchar *default_value, StashWidgetID widget_id)
{
@ -922,6 +941,7 @@ static GType object_get_property_type(GObject *object, const gchar *property_nam
* @c GObject data.
* @warning Currently only string GValue properties will be freed before setting; patch for
* other types - see @c handle_widget_property(). */
GEANY_API_SYMBOL
void stash_group_add_widget_property(StashGroup *group, gpointer setting,
const gchar *key_name, gpointer default_value, StashWidgetID widget_id,
const gchar *property_name, GType type)

View File

@ -36,6 +36,9 @@ typedef gconstpointer StashWidgetID;
StashGroup *stash_group_new(const gchar *name);
void stash_group_add_boolean(StashGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value);
void stash_group_add_integer(StashGroup *group, gint *setting,
const gchar *key_name, gint default_value);
@ -94,9 +97,6 @@ void stash_group_set_various(StashGroup *group, gboolean write_once);
void stash_group_set_use_defaults(StashGroup *group, gboolean use_defaults);
void stash_group_add_boolean(StashGroup *group, gboolean *setting,
const gchar *key_name, gboolean default_value);
/* *** GTK-related functions *** */
void stash_tree_setup(GPtrArray *group_array, GtkTreeView *tree);

View File

@ -292,6 +292,7 @@ GString *symbols_find_typenames_as_string(gint lang, gboolean global)
*
* @since 0.19
*/
GEANY_API_SYMBOL
const gchar *symbols_get_context_separator(gint ft_id)
{
switch (ft_id)

View File

@ -456,6 +456,7 @@ static gchar *get_template_fileheader(GeanyFiletype *ft)
/* TODO change the signature to take a GeanyDocument? this would break plugin API/ABI */
GEANY_API_SYMBOL
gchar *templates_get_template_fileheader(gint filetype_idx, const gchar *fname)
{
GeanyFiletype *ft = filetypes[filetype_idx];

View File

@ -165,6 +165,7 @@ static void set_statusbar(const gchar *text, gboolean allow_override)
/** Displays text on the statusbar.
* @param log Whether the message should be recorded in the Status window.
* @param format A @c printf -style string. */
GEANY_API_SYMBOL
void ui_set_statusbar(gboolean log, const gchar *format, ...)
{
gchar *string;
@ -966,6 +967,7 @@ static void on_doc_sensitive_widget_destroy(GtkWidget *widget, G_GNUC_UNUSED gpo
*
* @since 0.15
**/
GEANY_API_SYMBOL
void ui_add_document_sensitive(GtkWidget *widget)
{
gboolean enable = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) > 0;
@ -1459,6 +1461,7 @@ void ui_update_view_editor_menu_items(void)
* @param label_text The label text.
* @param alignment An address to store the alignment widget pointer.
* @return The frame widget, setting the alignment container for packing child widgets. */
GEANY_API_SYMBOL
GtkWidget *ui_frame_new_with_alignment(const gchar *label_text, GtkWidget **alignment)
{
GtkWidget *label, *align;
@ -1481,6 +1484,7 @@ GtkWidget *ui_frame_new_with_alignment(const gchar *label_text, GtkWidget **alig
/** Makes a fixed border for dialogs without increasing the button box border.
* @param dialog The parent container for the @c GtkVBox.
* @return The packed @c GtkVBox. */
GEANY_API_SYMBOL
GtkWidget *ui_dialog_vbox_new(GtkDialog *dialog)
{
GtkWidget *vbox = gtk_vbox_new(FALSE, 12); /* need child vbox to set a separate border. */
@ -1555,6 +1559,7 @@ void ui_dialog_set_primary_button_order(GtkDialog *dialog, gint response, ...)
* @param text Button label text, can include mnemonics.
* @return The new @c GtkButton.
*/
GEANY_API_SYMBOL
GtkWidget *ui_button_new_with_image(const gchar *stock_id, const gchar *text)
{
GtkWidget *image, *button;
@ -1575,6 +1580,7 @@ GtkWidget *ui_button_new_with_image(const gchar *stock_id, const gchar *text)
*
* @since 0.16
*/
GEANY_API_SYMBOL
GtkWidget *
ui_image_menu_item_new(const gchar *stock_id, const gchar *label)
{
@ -1605,6 +1611,7 @@ static void entry_clear_icon_release_cb(GtkEntry *entry, gint icon_pos,
*
* @since 0.16
*/
GEANY_API_SYMBOL
void ui_entry_add_clear_icon(GtkEntry *entry)
{
g_object_set(entry, "secondary-icon-stock", GTK_STOCK_CLEAR,
@ -1697,6 +1704,7 @@ static gboolean tree_model_find_text(GtkTreeModel *model,
* @param combo_entry .
* @param text Text to add, or @c NULL for current entry text.
* @param history_len Max number of items, or @c 0 for default. */
GEANY_API_SYMBOL
void ui_combo_box_add_to_history(GtkComboBoxText *combo_entry,
const gchar *text, gint history_len)
{
@ -1875,6 +1883,7 @@ static gboolean ui_tree_view_query_tooltip_cb(GtkWidget *widget, gint x, gint y,
*/
/* Note: @p column is int and not uint both to match gtk_tree_view_set_tooltip_column() signature
* and to allow future support of -1 to unset if ever wanted */
GEANY_API_SYMBOL
void ui_tree_view_set_tooltip_text_column(GtkTreeView *tree_view, gint column)
{
g_return_if_fail(column >= 0);
@ -1892,6 +1901,7 @@ void ui_tree_view_set_tooltip_text_column(GtkTreeView *tree_view, gint column)
* @param widget The widget.
* @param str The font name as expected by pango_font_description_from_string().
*/
GEANY_API_SYMBOL
void ui_widget_modify_font_from_string(GtkWidget *widget, const gchar *str)
{
PangoFontDescription *pfd;
@ -1913,6 +1923,7 @@ void ui_widget_modify_font_from_string(GtkWidget *widget, const gchar *str)
* @return The @c GtkHBox.
*/
/* @see ui_setup_open_button_callback(). */
GEANY_API_SYMBOL
GtkWidget *ui_path_box_new(const gchar *title, GtkFileChooserAction action, GtkEntry *entry)
{
GtkWidget *vbox, *dirbtn, *openimg, *hbox, *path_entry;
@ -2063,6 +2074,7 @@ void ui_statusbar_showhide(gboolean state)
* @param table
* @param row The row number of the table.
*/
GEANY_API_SYMBOL
void ui_table_add_row(GtkTable *table, gint row, ...)
{
va_list args;
@ -2435,7 +2447,7 @@ void ui_init_builder(void)
}
g_free(interface_file);
gtk_builder_connect_signals(builder, NULL);
callbacks_connect(builder);
edit_menu1 = GTK_WIDGET(gtk_builder_get_object(builder, "edit_menu1"));
prefs_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "prefs_dialog"));
@ -2642,6 +2654,7 @@ void ui_auto_separator_add_ref(GeanyAutoSeparator *autosep, GtkWidget *item)
* @since 0.16
* @deprecated 0.21 use gtk_widget_set_tooltip_text() instead
*/
GEANY_API_SYMBOL
void ui_widget_set_tooltip_text(GtkWidget *widget, const gchar *text)
{
gtk_widget_set_tooltip_text(widget, text);
@ -2659,6 +2672,7 @@ void ui_widget_set_tooltip_text(GtkWidget *widget, const gchar *text)
*
* @since 0.16
*/
GEANY_API_SYMBOL
GtkWidget *ui_lookup_widget(GtkWidget *widget, const gchar *widget_name)
{
GtkWidget *parent, *found_widget;
@ -2737,6 +2751,7 @@ static gboolean progress_bar_pulse(gpointer data)
*
* @since 0.16
**/
GEANY_API_SYMBOL
void ui_progress_bar_start(const gchar *text)
{
g_return_if_fail(progress_bar_timer_id == 0);
@ -2756,6 +2771,7 @@ void ui_progress_bar_start(const gchar *text)
*
* @since 0.16
**/
GEANY_API_SYMBOL
void ui_progress_bar_stop(void)
{
gtk_widget_hide(GTK_WIDGET(main_widgets.progressbar));
@ -2837,6 +2853,7 @@ GtkWidget *ui_label_new_bold(const gchar *text)
* the corresponding document pointer as @c user_data.
* @warning You should check @c doc->is_valid in the callback.
* @since 0.19 */
GEANY_API_SYMBOL
void ui_menu_add_document_items(GtkMenu *menu, GeanyDocument *active, GCallback callback)
{
ui_menu_add_document_items_sorted(menu, active, callback, NULL);
@ -2857,6 +2874,7 @@ void ui_menu_add_document_items(GtkMenu *menu, GeanyDocument *active, GCallback
* @param compare_func is used to sort the list. Might be @c NULL to not sort the list.
* @warning You should check @c doc->is_valid in the callback.
* @since 0.21 */
GEANY_API_SYMBOL
void ui_menu_add_document_items_sorted(GtkMenu *menu, GeanyDocument *active,
GCallback callback, GCompareFunc compare_func)
{
@ -2916,6 +2934,7 @@ void ui_menu_add_document_items_sorted(GtkMenu *menu, GeanyDocument *active,
* @param keyval A keyval.
* @return @c TRUE if @a keyval is the one of the Enter/Return key values, otherwise @c FALSE.
* @since 0.19 */
GEANY_API_SYMBOL
gboolean ui_is_keyval_enter_or_return(guint keyval)
{
return (keyval == GDK_Return || keyval == GDK_ISO_Enter|| keyval == GDK_KP_Enter);
@ -2928,6 +2947,7 @@ gboolean ui_is_keyval_enter_or_return(guint keyval)
* @param default_value The default value in case the value could not be read.
* @return The value for the property if it exists, otherwise the @a default_value.
* @since 0.19 */
GEANY_API_SYMBOL
gint ui_get_gtk_settings_integer(const gchar *property_name, gint default_value)
{
if (g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(
@ -3017,6 +3037,7 @@ void ui_focus_current_document(void)
* @param stock_id stock_id to lookup e.g. @c GTK_STOCK_OPEN.
* @return The label text for stock
* @since Geany 1.22 */
GEANY_API_SYMBOL
const gchar *ui_lookup_stock_label(const gchar *stock_id)
{
GtkStockItem item;

View File

@ -69,6 +69,7 @@
*
* @since 0.16
**/
GEANY_API_SYMBOL
void utils_open_browser(const gchar *uri)
{
#ifdef G_OS_WIN32
@ -210,6 +211,7 @@ gboolean utils_is_opening_brace(gchar c, gboolean include_angles)
* @return 0 if the file was successfully written, otherwise the @c errno of the
* failed operation is returned.
**/
GEANY_API_SYMBOL
gint utils_write_file(const gchar *filename, const gchar *text)
{
g_return_val_if_fail(filename != NULL, ENOENT);
@ -269,6 +271,7 @@ gint utils_write_file(const gchar *filename, const gchar *text)
* @param size .
* @return The tag name (newly allocated) or @c NULL if no opening tag was found.
*/
GEANY_API_SYMBOL
gchar *utils_find_open_xml_tag(const gchar sel[], gint size)
{
const gchar *cur, *begin;
@ -293,6 +296,7 @@ gchar *utils_find_open_xml_tag(const gchar sel[], gint size)
* @param size .
* @return pointer to '<' of the found opening tag within @a sel, or @c NULL if no opening tag was found.
*/
GEANY_API_SYMBOL
const gchar *utils_find_open_xml_tag_pos(const gchar sel[], gint size)
{
/* stolen from anjuta and modified */
@ -500,6 +504,7 @@ static gchar *utf8_strdown(const gchar *str)
*
* @since 0.16
*/
GEANY_API_SYMBOL
gint utils_str_casecmp(const gchar *s1, const gchar *s2)
{
gchar *tmp1, *tmp2;
@ -542,6 +547,7 @@ gint utils_str_casecmp(const gchar *s1, const gchar *s2)
* @since 0.17
*/
/* This following function is taken from Gedit. */
GEANY_API_SYMBOL
gchar *utils_str_middle_truncate(const gchar *string, guint truncate_length)
{
GString *truncated;
@ -591,6 +597,7 @@ gchar *utils_str_middle_truncate(const gchar *string, guint truncate_length)
*
* @return @c TRUE if @a a equals @a b, else @c FALSE.
**/
GEANY_API_SYMBOL
gboolean utils_str_equal(const gchar *a, const gchar *b)
{
/* (taken from libexo from os-cillation) */
@ -608,6 +615,7 @@ gboolean utils_str_equal(const gchar *a, const gchar *b)
*
* @return A newly-allocated string, should be freed when no longer needed.
**/
GEANY_API_SYMBOL
gchar *utils_remove_ext_from_filename(const gchar *filename)
{
gchar *last_dot;
@ -726,6 +734,7 @@ gint utils_strpos(const gchar *haystack, const gchar *needle)
*
* @since 0.16
*/
GEANY_API_SYMBOL
gchar *utils_get_date_time(const gchar *format, time_t *time_to_use)
{
const struct tm *tm;
@ -794,6 +803,7 @@ gchar *utils_get_initials(const gchar *name)
* @return The value associated with @a key as an integer, or the given default value if the value
* could not be retrieved.
**/
GEANY_API_SYMBOL
gint utils_get_setting_integer(GKeyFile *config, const gchar *section, const gchar *key,
const gint default_value)
{
@ -824,6 +834,7 @@ gint utils_get_setting_integer(GKeyFile *config, const gchar *section, const gch
* @return The value associated with @a key as a boolean, or the given default value if the value
* could not be retrieved.
**/
GEANY_API_SYMBOL
gboolean utils_get_setting_boolean(GKeyFile *config, const gchar *section, const gchar *key,
const gboolean default_value)
{
@ -854,6 +865,7 @@ gboolean utils_get_setting_boolean(GKeyFile *config, const gchar *section, const
* @return A newly allocated string, either the value for @a key or a copy of the given
* default value if it could not be retrieved.
**/
GEANY_API_SYMBOL
gchar *utils_get_setting_string(GKeyFile *config, const gchar *section, const gchar *key,
const gchar *default_value)
{
@ -1247,6 +1259,7 @@ gboolean utils_wrap_string(gchar *string, gint wrapstart)
* @return The converted string in locale encoding, or a copy of the input string if conversion
* failed. Should be freed with g_free(). If @a utf8_text is @c NULL, @c NULL is returned.
**/
GEANY_API_SYMBOL
gchar *utils_get_locale_from_utf8(const gchar *utf8_text)
{
#ifdef G_OS_WIN32
@ -1275,6 +1288,7 @@ gchar *utils_get_locale_from_utf8(const gchar *utf8_text)
* @return The converted string in UTF-8 encoding, or a copy of the input string if conversion
* failed. Should be freed with g_free(). If @a locale_text is @c NULL, @c NULL is returned.
**/
GEANY_API_SYMBOL
gchar *utils_get_utf8_from_locale(const gchar *locale_text)
{
#ifdef G_OS_WIN32
@ -1364,6 +1378,7 @@ gchar **utils_strv_new(const gchar *first, ...)
* @return 0 if the directory was successfully created, otherwise the @c errno of the
* failed operation is returned.
**/
GEANY_API_SYMBOL
gint utils_mkdir(const gchar *path, gboolean create_parent_dirs)
{
gint mode = 0700;
@ -1400,6 +1415,7 @@ gint utils_mkdir(const gchar *path, gboolean create_parent_dirs)
* freed when no longer needed.
* @see utils_get_file_list().
**/
GEANY_API_SYMBOL
GSList *utils_get_file_list_full(const gchar *path, gboolean full_path, gboolean sort, GError **error)
{
GSList *list = NULL;
@ -1444,6 +1460,7 @@ GSList *utils_get_file_list_full(const gchar *path, gboolean full_path, gboolean
* freed when no longer needed.
* @see utils_get_file_list_full().
**/
GEANY_API_SYMBOL
GSList *utils_get_file_list(const gchar *path, guint *length, GError **error)
{
GSList *list = utils_get_file_list_full(path, FALSE, TRUE, error);
@ -1531,6 +1548,7 @@ gint utils_string_replace(GString *str, gint pos, gint len, const gchar *replace
*
* @return Number of replacements made.
**/
GEANY_API_SYMBOL
guint utils_string_replace_all(GString *haystack, const gchar *needle, const gchar *replace)
{
guint count = 0;
@ -1564,6 +1582,7 @@ guint utils_string_replace_all(GString *haystack, const gchar *needle, const gch
*
* @since 0.16
*/
GEANY_API_SYMBOL
guint utils_string_replace_first(GString *haystack, const gchar *needle, const gchar *replace)
{
gint pos = utils_string_find(haystack, 0, -1, needle);
@ -1648,6 +1667,7 @@ const gchar *utils_get_default_dir_utf8(void)
*
* @return @c TRUE on success, @c FALSE if an error was set.
**/
GEANY_API_SYMBOL
gboolean utils_spawn_sync(const gchar *dir, gchar **argv, gchar **env, GSpawnFlags flags,
GSpawnChildSetupFunc child_setup, gpointer user_data, gchar **std_out,
gchar **std_err, gint *exit_status, GError **error)
@ -1691,6 +1711,7 @@ gboolean utils_spawn_sync(const gchar *dir, gchar **argv, gchar **env, GSpawnFla
*
* @return @c TRUE on success, @c FALSE if an error was set.
**/
GEANY_API_SYMBOL
gboolean utils_spawn_async(const gchar *dir, gchar **argv, gchar **env, GSpawnFlags flags,
GSpawnChildSetupFunc child_setup, gpointer user_data, GPid *child_pid,
GError **error)
@ -1859,6 +1880,7 @@ void utils_tidy_path(gchar *filename)
*
* @see @c g_strdelimit.
**/
GEANY_API_SYMBOL
gchar *utils_str_remove_chars(gchar *string, const gchar *chars)
{
const gchar *r;
@ -1970,6 +1992,7 @@ static gboolean str_in_array(const gchar **haystack, const gchar *needle)
*
* @return The new environment array.
**/
GEANY_API_SYMBOL
gchar **utils_copy_environment(const gchar **exclude_vars, const gchar *first_varname, ...)
{
gchar **result;

View File

@ -3,12 +3,13 @@ AM_CPPFLAGS = \
-I$(srcdir)/.. \
-DG_LOG_DOMAIN=\"CTags\"
AM_CFLAGS = \
$(GTK_CFLAGS)
$(GTK_CFLAGS) \
@LIBGEANY_CFLAGS@
EXTRA_DIST = \
makefile.win32
noinst_LIBRARIES = libctags.a
noinst_LTLIBRARIES = libctags.la
parsers = \
abaqus.c \
@ -54,7 +55,7 @@ parsers = \
verilog.c \
vhdl.c
libctags_a_SOURCES = \
libctags_la_SOURCES = \
args.c \
args.h \
ctags.c \
@ -83,4 +84,3 @@ libctags_a_SOURCES = \
vstring.c \
vstring.h \
$(parsers)

View File

@ -599,11 +599,7 @@ extern FILE *tempFile (const char *const mode, char **const pName)
tmpdir = TMPDIR;
name = xMalloc (strlen (tmpdir) + 1 + strlen (template) + 1, char);
sprintf (name, "%s%c%s", tmpdir, OUTPUT_PATH_SEPARATOR, template);
#ifdef G_OS_WIN32
fd = mkstemps(name, 0);
#else
fd = mkstemp(name);
#endif
#else
name = xMalloc (L_tmpnam, char);
if (tmpnam (name) != name)

View File

@ -1,9 +1,9 @@
noinst_LIBRARIES = libmio.a
noinst_LTLIBRARIES = libmio.la
AM_CPPFLAGS = -DG_LOG_DOMAIN=\"MIO\" #-DMIO_DEBUG
AM_CFLAGS = $(GTK_CFLAGS)
AM_CFLAGS = $(GTK_CFLAGS) @LIBGEANY_CFLAGS@
libmio_a_SOURCES = mio.c
libmio_la_SOURCES = mio.c
EXTRA_DIST = \
mio.h \

View File

@ -5,12 +5,13 @@ AM_CPPFLAGS = \
-DGEANY_PRIVATE \
-DG_LOG_DOMAIN=\"Tagmanager\"
AM_CFLAGS = \
$(GTK_CFLAGS)
$(GTK_CFLAGS) \
@LIBGEANY_CFLAGS@
EXTRA_DIST = \
makefile.win32
noinst_LIBRARIES = libtagmanager.a
noinst_LTLIBRARIES = libtagmanager.la
tagmanager_includedir = $(includedir)/geany/tagmanager
tagmanager_include_HEADERS = \
@ -20,7 +21,7 @@ tagmanager_include_HEADERS = \
tm_workspace.h
libtagmanager_a_SOURCES =\
libtagmanager_la_SOURCES =\
tm_tagmanager.h \
tm_parser.h \
tm_source_file.h \

View File

@ -29,7 +29,9 @@ GTK_INCLUDES= \
INCLUDEDIRS=-I ../ctags -I ../ -I . $(GTK_INCLUDES)
CBASEFLAGS=-Wall -pipe -mms-bitfields -DGEANY_PRIVATE -DPACKAGE=\"geany\" -Wno-missing-braces -Wno-char-subscripts $(INCLUDEDIRS)
CBASEFLAGS=-Wall -pipe -mms-bitfields -DGEANY_PRIVATE -DPACKAGE=\"geany\" -Wno-missing-braces -Wno-char-subscripts $(INCLUDEDIRS) \
-DGEANY_EXPORT_SYMBOL="__declspec(dllexport)" \
-DGEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL
ifdef DEBUG
CFLAGS= -O0 -g $(CBASEFLAGS)
else

View File

@ -84,6 +84,7 @@ static char *realpath (const char *pathname, char *resolved_path)
@param file_name The original file_name
@return A newly allocated string containing the real path to the file. NULL if none is available.
*/
GEANY_API_SYMBOL
gchar *tm_get_real_path(const gchar *file_name)
{
if (file_name)
@ -195,6 +196,7 @@ static gboolean tm_source_file_init(TMSourceFile *source_file, const char *file_
* @param name Name of the used programming language, NULL for autodetection.
* @return The created unparsed TMSourceFile object.
* */
GEANY_API_SYMBOL
TMSourceFile *tm_source_file_new(const char *file_name, const char *name)
{
TMSourceFile *source_file = g_new(TMSourceFile, 1);
@ -225,6 +227,7 @@ static void tm_source_file_destroy(TMSourceFile *source_file)
function the TMSourceFile has to be removed from the TMWorkspace.
@param source_file The source file to free.
*/
GEANY_API_SYMBOL
void tm_source_file_free(TMSourceFile *source_file)
{
if (NULL != source_file)

View File

@ -157,6 +157,7 @@ static void update_source_file(TMSourceFile *source_file, guchar* text_buf,
/** Adds a source file to the workspace, parses it and updates the workspace tags.
@param source_file The source file to add to the workspace.
*/
GEANY_API_SYMBOL
void tm_workspace_add_source_file(TMSourceFile *source_file)
{
g_return_if_fail(source_file != NULL);
@ -199,6 +200,7 @@ void tm_workspace_update_source_file_buffer(TMSourceFile *source_file, guchar* t
pointer call tm_source_file_free() on it.
@param source_file Pointer to the source file to be removed.
*/
GEANY_API_SYMBOL
void tm_workspace_remove_source_file(TMSourceFile *source_file)
{
guint i;
@ -266,6 +268,7 @@ static void tm_workspace_update(void)
tm_workspace_update_source_file() separately for each of the files.
@param source_files The source files to be added to the workspace.
*/
GEANY_API_SYMBOL
void tm_workspace_add_source_files(GPtrArray *source_files)
{
guint i;
@ -290,6 +293,7 @@ void tm_workspace_add_source_files(GPtrArray *source_files)
call tm_source_file_free() on each of them.
@param source_files The source files to be removed from the workspace.
*/
GEANY_API_SYMBOL
void tm_workspace_remove_source_files(GPtrArray *source_files)
{
guint i, j;

145
wscript
View File

@ -58,10 +58,11 @@ MINIMUM_GTK_VERSION = '2.16.0'
MINIMUM_GTK3_VERSION = '3.0.0'
MINIMUM_GLIB_VERSION = '2.20.0'
GEANY_LIB_VERSION = '0.0.0'
top = '.'
out = '_build_'
mio_sources = set(['tagmanager/mio/mio.c'])
ctags_sources = set([
@ -132,7 +133,7 @@ geany_sources = set([
'src/editor.c', 'src/encodings.c', 'src/filetypes.c', 'src/geanyentryaction.c',
'src/geanymenubuttonaction.c', 'src/geanyobject.c', 'src/geanywraplabel.c',
'src/highlighting.c', 'src/keybindings.c',
'src/keyfile.c', 'src/log.c', 'src/main.c', 'src/msgwindow.c', 'src/navqueue.c', 'src/notebook.c', 'src/osx.c',
'src/keyfile.c', 'src/log.c', 'src/libmain.c', 'src/msgwindow.c', 'src/navqueue.c', 'src/notebook.c', 'src/osx.c',
'src/plugins.c', 'src/pluginutils.c', 'src/prefix.c', 'src/prefs.c', 'src/printing.c', 'src/project.c',
'src/sciwrappers.c', 'src/search.c', 'src/socket.c', 'src/stash.c',
'src/symbols.c',
@ -186,6 +187,7 @@ def configure(conf):
conf.load('compiler_c')
is_win32 = _target_is_win32(conf)
visibility_hidden_supported = conf.check_cc(cflags=['-Werror', '-fvisibility=hidden'], mandatory=False)
conf.check_cc(header_name='fcntl.h', mandatory=False)
conf.check_cc(header_name='fnmatch.h', mandatory=False)
conf.check_cc(header_name='glob.h', mandatory=False)
@ -268,7 +270,7 @@ but you then may not have a local copy of the HTML manual.'''
'-mwindows',
'-static-libgcc',
'-static-libstdc++'])
conf.env.append_value('LIB_WIN32', ['wsock32', 'uuid', 'ole32'])
conf.env.append_value('LIB_WIN32', ['wsock32', 'uuid', 'ole32', 'comdlg32'])
# explicitly define Windows version for older Mingw environments
conf.define('WINVER', '0x0501', quote=False) # for SHGetFolderPathAndSubDirW
conf.define('_WIN32_IE', '0x0500', quote=False) # for SHGFP_TYPE
@ -307,6 +309,21 @@ but you then may not have a local copy of the HTML manual.'''
conf.write_config_header('config.h', remove=False)
# GEANY_EXPORT_SYMBOL and GEANY_API_SYMBOL
if is_win32:
geanyexport_cflags = []
geanyexport_defines = ['GEANY_EXPORT_SYMBOL=__declspec(dllexport)']
elif visibility_hidden_supported:
geanyexport_cflags = ['-fvisibility=hidden']
geanyexport_defines = ['GEANY_EXPORT_SYMBOL=__attribute__((visibility("default")))']
else: # unknown, define to nothing
geanyexport_cflags = []
geanyexport_defines = ['GEANY_EXPORT_SYMBOL=']
geanyexport_defines.append('GEANY_API_SYMBOL=GEANY_EXPORT_SYMBOL')
conf.env['DEFINES_geanyexport'] = geanyexport_defines
conf.env['CFLAGS_geanyexport'] = geanyexport_cflags
conf.env['CXXFLAGS_geanyexport'] = geanyexport_cflags
# some more compiler flags
conf.env.append_value('CFLAGS', ['-DHAVE_CONFIG_H'])
if conf.env['CC_NAME'] == 'gcc' and '-O' not in ''.join(conf.env['CFLAGS']):
@ -389,52 +406,49 @@ def build(bld):
defines = 'G_LOG_DOMAIN="%s"' % plugin_name,
target = plugin_name,
uselib = ['GTK', 'GLIB', 'GMODULE'] + uselib_add,
use = ['geany'],
install_path = instpath)
# CTags
bld(
features = ['c', 'cstlib'],
bld.objects(
features = ['c'],
source = ctags_sources,
name = 'ctags',
target = 'ctags',
includes = ['.', 'tagmanager', 'tagmanager/ctags'],
defines = 'G_LOG_DOMAIN="CTags"',
uselib = ['GLIB'],
install_path = None) # do not install this library
uselib = ['cshlib', 'GLIB', 'geanyexport'])
# Tagmanager
bld(
features = ['c', 'cstlib'],
bld.objects(
features = ['c'],
source = tagmanager_sources,
name = 'tagmanager',
target = 'tagmanager',
includes = ['.', 'tagmanager', 'tagmanager/ctags'],
defines = ['GEANY_PRIVATE', 'G_LOG_DOMAIN="Tagmanager"'],
uselib = ['GTK', 'GLIB'],
install_path = None) # do not install this library
uselib = ['cshlib', 'GTK', 'GLIB', 'geanyexport'])
# MIO
bld(
features = ['c', 'cstlib'],
bld.objects(
features = ['c'],
source = mio_sources,
name = 'mio',
target = 'mio',
includes = ['.', 'tagmanager/mio/'],
defines = 'G_LOG_DOMAIN="MIO"',
uselib = ['GTK', 'GLIB'],
install_path = None) # do not install this library
uselib = ['cshlib', 'GTK', 'GLIB', 'geanyexport'])
# Scintilla
files = bld.srcnode.ant_glob('scintilla/**/*.cxx', src=True, dir=False)
scintilla_sources.update([file.path_from(bld.srcnode) for file in files])
bld(
features = ['c', 'cxx', 'cxxstlib'],
bld.objects(
features = ['c', 'cxx'],
name = 'scintilla',
target = 'scintilla',
source = scintilla_sources,
includes = ['.', 'scintilla/include', 'scintilla/src', 'scintilla/lexlib'],
uselib = ['GTK', 'GLIB', 'GMODULE', 'M'],
install_path = None) # do not install this library
uselib = ['cshlib', 'cxxshlib', 'GTK', 'GLIB', 'GMODULE', 'M', 'geanyexport'])
# Geany
if bld.env['HAVE_VTE'] == 1:
@ -443,23 +457,59 @@ def build(bld):
geany_sources.add('src/win32.c')
geany_sources.add('geany_private.rc')
def gen_signallist(task):
from xml.etree import ElementTree
def find_handlers(xml_filename):
tree = ElementTree.parse(xml_filename)
signals = tree.getroot().findall(".//signal")
return [sig.attrib["handler"] for sig in signals]
handlers = []
for node in task.inputs:
handlers += find_handlers(node.abspath())
handlers = sorted(set(handlers))
for node in task.outputs:
node.write("/* This file is auto-generated, do not edit. */\n" +
''.join(["ITEM(%s)\n" % h for h in handlers]))
# signallist.i
bld(
features = ['c', 'cxx', 'cprogram'],
source = 'data/geany.glade',
target = 'src/signallist.i',
name = 'signallist.i',
rule = gen_signallist)
base_uselibs = ['GTK', 'GLIB', 'GMODULE', 'GIO', 'GTHREAD', 'WIN32', 'MAC_INTEGRATION', 'SUNOS_SOCKET', 'M']
# libgeany
bld.shlib(
features = ['c', 'cxx'],
name = 'geany',
target = 'geany',
source = geany_sources,
includes = ['.', 'scintilla/include', 'tagmanager/src', 'src'],
defines = ['G_LOG_DOMAIN="Geany"', 'GEANY_PRIVATE'],
uselib = base_uselibs + ['geanyexport'],
use = ['scintilla', 'ctags', 'tagmanager', 'mio'],
linkflags = bld.env['LINKFLAGS_cprogram'],
vnum = GEANY_LIB_VERSION,
install_path = '${PREFIX}/bin' if is_win32 else '${LIBDIR}')
# geany executable
t = bld.program(
features = ['c', 'cxx'],
name = 'geany_bin',
target = 'geany',
source = ['src/main.c'],
includes = ['.', 'scintilla/include', 'tagmanager/src'],
defines = ['G_LOG_DOMAIN="Geany"', 'GEANY_PRIVATE'],
uselib = ['GTK', 'GLIB', 'GMODULE', 'GIO', 'GTHREAD', 'WIN32', 'MAC_INTEGRATION', 'SUNOS_SOCKET', 'M'],
use = ['scintilla', 'ctags', 'tagmanager', 'mio'])
# geanyfunctions.h
bld(
source = ['plugins/genapi.py', 'src/plugins.c'],
name = 'geanyfunctions.h',
before = ['c', 'cxx'],
cwd = '%s/plugins' % bld.path.abspath(),
rule = '%s genapi.py -q' % sys.executable)
uselib = base_uselibs + ['geanyexport'],
use = ['geany'])
if not is_win32:
# http://www.freehackers.org/~tnagy/testdoc/single.html#common_c
t.rpath = bld.env['LIBDIR']
# Plugins
if bld.env['HAVE_PLUGINS'] == 1:
@ -554,11 +604,36 @@ def build(bld):
###
# Headers
bld.install_files('${PREFIX}/include/geany', '''
src/app.h src/document.h src/editor.h src/encodings.h src/filetypes.h src/geany.h
src/highlighting.h src/keybindings.h src/msgwindow.h src/plugindata.h
src/prefs.h src/project.h src/search.h src/stash.h src/support.h
src/templates.h src/toolbar.h src/ui_utils.h src/utils.h src/build.h src/gtkcompat.h
plugins/geanyplugin.h plugins/geanyfunctions.h''')
src/app.h
src/build.h
src/dialogs.h
src/document.h
src/editor.h
src/encodings.h
src/filetypes.h
src/geany.h
src/highlighting.h
src/keybindings.h
src/main.h
src/msgwindow.h
src/navqueue.h
src/plugindata.h
src/pluginutils.h
src/prefs.h
src/project.h
src/sciwrappers.h
src/search.h
src/stash.h
src/support.h
src/symbols.h
src/templates.h
src/toolbar.h
src/ui_utils.h
src/utils.h
src/gtkcompat.h
plugins/geanyplugin.h
plugins/geanyfunctions.h
''')
bld.install_files('${PREFIX}/include/geany/scintilla', '''
scintilla/include/SciLexer.h scintilla/include/Scintilla.h
scintilla/include/Scintilla.iface scintilla/include/ScintillaWidget.h ''')