diff --git a/.settings/.gitignore b/.settings/.gitignore
new file mode 100644
index 00000000..d81d4c41
--- /dev/null
+++ b/.settings/.gitignore
@@ -0,0 +1 @@
+/language.settings.xml
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
deleted file mode 100644
index ca7c0739..00000000
--- a/.settings/language.settings.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/Example/main.lua b/plugins/Example/main.lua
index 4a599d82..f63a7486 100644
--- a/plugins/Example/main.lua
+++ b/plugins/Example/main.lua
@@ -6,7 +6,7 @@ var_dump = require "var_dump"
function initUi()
print("Hello from Example: Plugin initUi called\n");
- ref = app.registerUi({["menu"] = "Test123", ["callback"] = "exampleCallback"});
+ ref = app.registerUi({["menu"] = "Test123", ["callback"] = "exampleCallback", ["accelerator"] = "t"});
print("Menu reference:");
var_dump(ref);
@@ -15,5 +15,6 @@ end
-- Callback if the menu item is executed
function exampleCallback()
- app.msgbox("Test123", "yes,no");
+ result = app.msgbox("Test123", {[1] = "Yes", [2] = "No"});
+ print("result = " .. result)
end
diff --git a/src/plugin/Plugin.cpp b/src/plugin/Plugin.cpp
index 074942ee..26205481 100644
--- a/src/plugin/Plugin.cpp
+++ b/src/plugin/Plugin.cpp
@@ -1,6 +1,7 @@
#include "Plugin.h"
#include
+#include
#ifdef ENABLE_PLUGINS
@@ -118,7 +119,7 @@ void Plugin::registerToolbar()
/**
* Register all menu entries to the menu
*/
-void Plugin::registerMenu(GtkWidget* menu)
+void Plugin::registerMenu(GtkWindow* mainWindow, GtkWidget* menu)
{
XOJ_CHECK_TYPE(Plugin);
@@ -130,12 +131,23 @@ void Plugin::registerMenu(GtkWidget* menu)
gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
+ GtkAccelGroup* accelGroup = gtk_accel_group_new();
+
for (MenuEntry* m : menuEntries)
{
GtkWidget* mi = gtk_menu_item_new_with_label(m->menu.c_str());
m->widget = mi;
gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
+ if (m->accelerator != "")
+ {
+ guint acceleratorKey = 0;
+ GdkModifierType mods = (GdkModifierType)0;
+ gtk_accelerator_parse(m->accelerator.c_str(), &acceleratorKey, &mods);
+
+ gtk_widget_add_accelerator(mi, "activate", accelGroup, acceleratorKey, mods, GTK_ACCEL_VISIBLE);
+ }
+
g_signal_connect(mi, "activate", G_CALLBACK(
+[](GtkWidget* bt, MenuEntry* me)
{
@@ -143,6 +155,8 @@ void Plugin::registerMenu(GtkWidget* menu)
me->plugin->executeMenuEntry(me);
}), m);
}
+
+ gtk_window_add_accel_group(GTK_WINDOW(mainWindow), accelGroup);
}
/**
@@ -180,11 +194,12 @@ bool Plugin::isInInitUi()
*
* @return Internal ID, can e.g. be used to disable the menu
*/
-int Plugin::registerMenu(string menu, string callback)
+int Plugin::registerMenu(string menu, string callback, string accelerator)
{
MenuEntry* m = new MenuEntry(this);
m->menu = menu;
m->callback = callback;
+ m->accelerator = accelerator;
menuEntries.push_back(m);
return menuEntries.size() - 1;
@@ -315,7 +330,9 @@ void Plugin::loadScript()
if (lua_pcall(lua, 0, 0, 0) != LUA_OK)
{
const char* errMsg = lua_tostring(lua, -1);
- XojMsgBox::showPluginMessage(name, errMsg, MSG_BT_OK, true);
+ map button;
+ button.insert(std::pair(0, _("OK")));
+ XojMsgBox::showPluginMessage(name, errMsg, button, true);
g_warning("Could not run plugin Lua file: «%s», error: «%s»", luafile.c_str(), errMsg);
this->valid = false;
@@ -334,7 +351,9 @@ bool Plugin::callFunction(string fnc)
if (lua_pcall(lua, 0, 0, 0))
{
const char* errMsg = lua_tostring(lua, -1);
- XojMsgBox::showPluginMessage(name, errMsg, MSG_BT_OK, true);
+ map button;
+ button.insert(std::pair(0, _("OK")));
+ XojMsgBox::showPluginMessage(name, errMsg, button, true);
g_warning("Error in Plugin: «%s», error: «%s»", name.c_str(), errMsg);
return false;
diff --git a/src/plugin/Plugin.h b/src/plugin/Plugin.h
index 95fa682b..18851800 100644
--- a/src/plugin/Plugin.h
+++ b/src/plugin/Plugin.h
@@ -58,6 +58,13 @@ public:
* Callback function name
*/
string callback;
+
+ /**
+ * Accelerator key
+ *
+ * See https://developer.gnome.org/gtk3/stable/gtk3-Keyboard-Accelerators.html#gtk-accelerator-parse
+ */
+ string accelerator;
};
class Plugin
@@ -80,7 +87,7 @@ public:
/**
* Register all menu entries to the menu
*/
- void registerMenu(GtkWidget* menu);
+ void registerMenu(GtkWindow* mainWindow, GtkWidget* menu);
/**
* Execute menu entry
@@ -102,7 +109,7 @@ public:
*
* @return Internal ID, can e.g. be used to disable the menu
*/
- int registerMenu(string menu, string callback);
+ int registerMenu(string menu, string callback, string accelerator);
private:
/**
diff --git a/src/plugin/PluginController.cpp b/src/plugin/PluginController.cpp
index c1a5e9f3..50b652fb 100644
--- a/src/plugin/PluginController.cpp
+++ b/src/plugin/PluginController.cpp
@@ -109,7 +109,7 @@ void PluginController::registerMenu()
GtkWidget* menuPlugin = control->getWindow()->get("menuPlugin");
for (Plugin* p : this->plugins)
{
- p->registerMenu(menuPlugin);
+ p->registerMenu(control->getGtkWindow(), menuPlugin);
}
gtk_widget_show_all(menuPlugin);
diff --git a/src/plugin/luapi_application.h b/src/plugin/luapi_application.h
index 0e798e9c..1c2e34bc 100644
--- a/src/plugin/luapi_application.h
+++ b/src/plugin/luapi_application.h
@@ -12,43 +12,38 @@
#include
#include
+#include