[geany/geany] 38a0e4: Allow plugins to process keypress events before Geany (#1829)
Jiří Techet
git-noreply at xxxxx
Mon May 21 23:35:44 UTC 2018
Branch: refs/heads/master
Author: Jiří Techet <techet at gmail.com>
Committer: elextr <elextr at gmail.com>
Date: Mon, 21 May 2018 23:35:44 UTC
Commit: 38a0e4f5b01ac2ed6ad91de8724cd769c0cfab37
https://github.com/geany/geany/commit/38a0e4f5b01ac2ed6ad91de8724cd769c0cfab37
Log Message:
-----------
Allow plugins to process keypress events before Geany (#1829)
In addition, the signal allows plugins swallow the event so it's not
processed by Geany.
Modified Paths:
--------------
doc/pluginsignals.c
src/geanyobject.c
src/geanyobject.h
src/keybindings.c
src/plugindata.h
Modified: doc/pluginsignals.c
20 lines changed, 20 insertions(+), 0 deletions(-)
===================================================================
@@ -270,3 +270,23 @@ signal void (*update_editor_menu)(GObject *obj, const gchar *word, gint pos, Gea
*/
signal gboolean (*editor_notify)(GObject *obj, GeanyEditor *editor, SCNotification *nt,
gpointer user_data);
+
+/** Sent whenever a key is pressed.
+ *
+ * This signal allows plugins to receive key press events before they are processed
+ * by Geany. Plugins can then process key presses before Geany and decide,
+ * whether Geany should receive the key press event or not.
+ *
+ * @warning This signal should be used carefully. If multiple plugins use this
+ * signal, the result could be unpredictble depending on which plugin
+ * receives the signal first.
+ *
+ * @param obj a GeanyObject instance, should be ignored.
+ * @param key The GdkEventKey corresponding to the key press.
+ * @param user_data user data.
+ * @return @c TRUE to stop other handlers from being invoked for the event.
+ * @c FALSE to propagate the event further.
+ *
+ * @since 1.34
+ */
+signal gboolean (*key_press)(GObject *obj, GdkEventKey *key, gpointer user_data);
Modified: src/geanyobject.c
9 lines changed, 9 insertions(+), 0 deletions(-)
===================================================================
@@ -229,6 +229,15 @@ static void create_signals(GObjectClass *g_object_class)
0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
G_TYPE_NONE, 1,
G_TYPE_KEY_FILE);
+
+ /* Key press signal */
+ geany_object_signals[GCB_KEY_PRESS_NOTIFY] = g_signal_new (
+ "key-press",
+ G_OBJECT_CLASS_TYPE (g_object_class),
+ G_SIGNAL_RUN_LAST,
+ 0, boolean_handled_accumulator, NULL, NULL,
+ G_TYPE_BOOLEAN, 1,
+ GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
}
Modified: src/geanyobject.h
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -57,6 +57,7 @@ typedef enum
GCB_BUILD_START,
GCB_SAVE_SETTINGS,
GCB_LOAD_SETTINGS,
+ GCB_KEY_PRESS_NOTIFY,
GCB_MAX
}
GeanyCallbackId;
Modified: src/keybindings.c
6 lines changed, 6 insertions(+), 0 deletions(-)
===================================================================
@@ -38,6 +38,7 @@
#include "callbacks.h"
#include "documentprivate.h"
#include "filetypes.h"
+#include "geanyobject.h"
#include "keybindingsprivate.h"
#include "main.h"
#include "msgwindow.h"
@@ -1350,10 +1351,15 @@ static gboolean on_key_press_event(GtkWidget *widget, GdkEventKey *ev, gpointer
GeanyDocument *doc;
GeanyKeyGroup *group;
GeanyKeyBinding *kb;
+ gboolean key_press_ret;
if (ev->keyval == 0)
return FALSE;
+ g_signal_emit_by_name(geany_object, "key-press", ev, &key_press_ret);
+ if (key_press_ret)
+ return TRUE;
+
doc = document_get_current();
if (doc)
document_check_disk_status(doc, FALSE);
Modified: src/plugindata.h
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -59,7 +59,7 @@ G_BEGIN_DECLS
* @warning You should not test for values below 200 as previously
* @c GEANY_API_VERSION was defined as an enum value, not a macro.
*/
-#define GEANY_API_VERSION 236
+#define GEANY_API_VERSION 237
/* hack to have a different ABI when built with GTK3 because loading GTK2-linked plugins
* with GTK3-linked Geany leads to crash */
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list