- 01 Eyl, 2015 1 kayıt (commit)
-
-
- 25 Agu, 2015 1 kayıt (commit)
-
-
Enrico Tröger yazdı
-
- 24 Agu, 2015 1 kayıt (commit)
-
-
Colomban Wendling yazdı
Closes #624.
-
- 23 Agu, 2015 12 kayıt (commit)
-
-
Colomban Wendling yazdı
Plugin loader redesign
-
Colomban Wendling yazdı
Rust updates
-
Thomas Martitz yazdı
Since geany_load_module() is called for non-enabled plugins you may not use the plugin API here yet. The only exceptions to this rule are API functions required for plugin registration. This rule is hard to enforce (would need to g_return_if_val(PLUGIN_LOADED_OK(p)) for all API functions (well, those taking a plugin pointer anyway), so this rule is only documented for now.
-
Thomas Martitz yazdı
It was found that because geany_plugin_set_data() could be used by both plugin's init() and geany_load_module(), that it introduced some uncertainty as to when to call the free_func. init() callers might expect the call around the same time as cleanup() is called, while geany_load_module() callers expected the call at module unload time. It was indeed called at module unload time. But that means that init() callers cannot call it again reliably after in a init()->cleanup()->init() flow (when toggling the plugin) without fully unloading the plugin (which is what we do currently but that's we would want to change). With the separation we can actually destroy the data depending on where it was set and do everything unambigiously.
-
Thomas Martitz yazdı
The documentation provides a quite detailed description of the new loader In addition it adds a "how to transition" that briefly describes the old loader (for curious newcomers) and lots of hints for porting legacy plugins to the new loader.
-
Thomas Martitz yazdı
If the plugin did not set its own user_data we set it to whatever it set with geany_plugin_register_full() or geany_plugin_set_data(). This is particularly convinient because PluginCallback is usually statically allocated, at which point dynamically allocated plugin data doesn't exists yet.
-
Thomas Martitz yazdı
- The return value from geany_load_module is removed (void). It was ignored anyway and we have to check separately whether the plugin loaded OK or not anyway. If the plugin specific code fails it should simply not call geany_plugin_register() (which it should only call iff all other conditions are good). - GeanyPluginFuncs::init() now returns a bool to allow failing initialization. Some plugins might want to defer work to their init() (i.e. only do it when the plugin was activated by the user), and some of that work can possibly fail (e.g. GtkBuilder fails to load .xml). Note that the GUI integration of the latter is less than ideal but this kind of GUI/policy work is out of scope for this patch set. Therefore a plugin failing to init is simply removed from the PM dialog as if it became incompatible. However, as the code that generates the list does not call init they will show up again if the PM dialog is re-opened.
-
Thomas Martitz yazdı
Demoplugin, while not installed by default, is a nice starting point and mini-howto. Therefore it should advertise the new loader from the beginning.
-
Thomas Martitz yazdı
With geany_plugin_set_data() the legacy plugin support can be made more transparent by using wrapper functions that call the actual plugin_* functions. This allows to remove the differentiation in code that's not directly concerned with actually loading plugins. This commit doesn't change anything except for one thing: legacy plugins now cannot call geany_plugin_set_data(). But it is meant for new-style plugins anyway.
-
Thomas Martitz yazdı
The API function adds a free_func parameter, and can also be called after geany_plugin_register(), i.e. in the plugin's init() callback. This fixes a by-design memory leak and gives greater flexibility.
-
Thomas Martitz yazdı
This is easier to handle if we decide to add callbacks. Since we can zero-initialize callbacks before passing it to the plugin we can be certain as to which callbacks the plugin knew about when it was compiled. This is exactly the same method used for GeanyPlugin::info already and easier than inspecting the API version.
-
Thomas Martitz yazdı
The old plugin loader has a number of deficiencies: - plugins need to export a couple of callback functions into the global namespace - plugins need to export data pointers, that are written by Geany - the exported functions have no user_data param, so there is no way to pass context/state back to the plugin (it needs global storage for that) - plugin registration is implicit, plugins have no way to not register themselves (it may want that due to missing runtime dependencies) - plugins perform the ABI/API verification, and even though we provide a convinience wrapper, it may get that wrong As a result, I designed a new loader with the following design principles - semantics of callbacks should not change, but they they shouldn't be mess with the global namespace - each callback receives a self-identifying param (the GeanyPlugin instance) and a plugin-defined data pointer for their own use - explicit registration through a new API function - in-core API/ABI checks The following principles shall be left unchanged: - The scan is done on startup and when the PM dialog is opened - Geany allocates GeanyPluginPrivate for each plugin, and GeanyPlugin is a member of it - Geany initially probes for the validity of the plugin, including file type and API/ABI check, thus Geany has the last word in determining what a plugin is - the PM dialog is updated with the proper, translated plugin information - the PM dialog GUI and user interaction in general is unchanged With the redesign, plugins export a single function: geany_load_module(). This is called when the GModule is loaded. The main purpose of this function is to call geany_plugin_register() (new API function) to register the plugin. This is the only function that is learned about through g_module_symbol(). Within this call the plugin should a) set the localized info fields of GeanyPlugin::info b) pass compiled-against and minimum API version as well as compiled-against ABI version, to allow Geany to verify compatibility c) pass a pointer to an instance of GeanyPluginFuncs which holds pointers to enhanced versions of the known callbacks (except configure_single which is dropped). d) optionally pass a plugin-private data pointer for later callbacks Enhanced means that all callbacks receive the GeanyPlugin pointer as the first and a pdata pointer as the last. pdata is private to the plugin and is set by geany_plugin_register(). The callbacks need (should) not be globally defined anymore, and the global GeanyData, GeanyPlugin and GeanyFunctions pointers are ignored and not set anymore. GeanyData is available through GeanyPlugin::geany_data.
-
- 22 Agu, 2015 3 kayıt (commit)
-
-
Pavel Sountsov yazdı
-
Pavel Sountsov yazdı
-
Pavel Sountsov yazdı
-
- 21 Agu, 2015 1 kayıt (commit)
-
-
Colomban Wendling yazdı
Make Document > Strip trailing spaces/Replace tabs/Replace spaces use the current selection.
-
- 16 Agu, 2015 5 kayıt (commit)
-
-
Colomban Wendling yazdı
-
Pavel Sountsov yazdı
-
Pavel Sountsov yazdı
-
Pavel Sountsov yazdı
When saving the file, the tabs are removed from the whole file as usual.
-
Pavel Sountsov yazdı
When the lines are stripped due to the file being saved, ignore the selection.
-
- 06 Agu, 2015 1 kayıt (commit)
-
-
Frank Lanitz yazdı
-
- 05 Agu, 2015 2 kayıt (commit)
-
-
Dominic Hopf yazdı
Add new keywords for recent versions of Perl
-
Olivier Duclos yazdı
This commit adds the following new keywords for perl: - say - state - given, when, default - __SUB__ While __SUB__ was introduced in perl 5.16, the others date back to v5.10 released in 2007!
-
- 04 Agu, 2015 1 kayıt (commit)
-
-
Matthew Brush yazdı
Closes #590
-
- 31 Tem, 2015 1 kayıt (commit)
-
-
Wayne Nilsen yazdı
Closes PR #557
-
- 22 Tem, 2015 4 kayıt (commit)
-
-
Colomban Wendling yazdı
Fix Doxygen warnings
-
Enrico Tröger yazdı
Windows: restore modern design of native file dialogs
-
Enrico Tröger yazdı
This resolves warnings from Doxygen about non-existing commands caused by unescaped backslashes as well as multiply defined section names.
-
Enrico Tröger yazdı
Cleanup win32defines
-
- 21 Tem, 2015 2 kayıt (commit)
-
-
Enrico Tröger yazdı
Remove needless debug print
-
Matthew Brush yazdı
Prevents spamming the console when SCLEX_CONTAINER is activated (ex. by plugins).
-
- 19 Tem, 2015 1 kayıt (commit)
-
-
Enrico Tröger yazdı
This restores the previously used "modern design" of the Windows native file open/save dialogs. Also make the dialogs resizable. Fixes #578.
-
- 18 Tem, 2015 1 kayıt (commit)
-
-
Jiří Techet yazdı
Since both gcc and llvm use ^ to mark the position of the error now, monospace font seems to be a better default font for the message window to avoid the ^ character misalignment. Fixes #435.
-
- 14 Tem, 2015 1 kayıt (commit)
-
-
Colomban Wendling yazdı
-
- 13 Tem, 2015 1 kayıt (commit)
-
-
Dimitar Zhekov yazdı
The git PR for this change contains a long explanation.
-
- 12 Tem, 2015 1 kayıt (commit)
-
-
Colomban Wendling yazdı
* geany.nsi and doc/geany.html are now generated; * freecode.com is dead.
-