[gedit-plugins] Port bookmarks plugin to new menu api
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit-plugins] Port bookmarks plugin to new menu api
- Date: Fri, 10 Jan 2014 20:19:29 +0000 (UTC)
commit 5def9e0d9044e0c77d6aa9ebfea5d649827b915b
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Fri Jan 10 21:00:45 2014 +0100
Port bookmarks plugin to new menu api
plugins/bookmarks/Makefile.am | 2 +
.../bookmarks/gedit-bookmarks-app-activatable.c | 163 ++++++++++++++++++++
.../bookmarks/gedit-bookmarks-app-activatable.h | 56 +++++++
plugins/bookmarks/gedit-bookmarks-plugin.c | 147 ++++++++----------
4 files changed, 290 insertions(+), 78 deletions(-)
---
diff --git a/plugins/bookmarks/Makefile.am b/plugins/bookmarks/Makefile.am
index df5f97f..d668a49 100644
--- a/plugins/bookmarks/Makefile.am
+++ b/plugins/bookmarks/Makefile.am
@@ -12,6 +12,8 @@ plugin_LTLIBRARIES = libbookmarks.la
libbookmarks_la_SOURCES = \
gedit-bookmarks-plugin.h \
gedit-bookmarks-plugin.c \
+ gedit-bookmarks-app-activatable.h \
+ gedit-bookmarks-app-activatable.c \
messages/gedit-bookmarks-message-add.c \
messages/gedit-bookmarks-message-add.h \
messages/gedit-bookmarks-message-goto-next.c \
diff --git a/plugins/bookmarks/gedit-bookmarks-app-activatable.c
b/plugins/bookmarks/gedit-bookmarks-app-activatable.c
new file mode 100644
index 0000000..10a4fc1
--- /dev/null
+++ b/plugins/bookmarks/gedit-bookmarks-app-activatable.c
@@ -0,0 +1,163 @@
+/*
+ * gedit-bookmarks-app-activatable.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2014 - Ignacio Casal Quinteiro
+ *
+ * gedit 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.
+ *
+ * gedit 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 gedit. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "gedit-bookmarks-app-activatable.h"
+#include <gedit/gedit-app-activatable.h>
+#include <gedit/gedit-app.h>
+#include <libpeas/peas-object-module.h>
+
+
+typedef struct _GeditBookmarksAppActivatablePrivate
+{
+ GeditApp *app;
+} GeditBookmarksAppActivatablePrivate;
+
+enum
+{
+ PROP_0,
+ PROP_APP
+};
+
+static void gedit_app_activatable_iface_init (GeditAppActivatableInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditBookmarksAppActivatable,
+ gedit_bookmarks_app_activatable,
+ G_TYPE_OBJECT,
+ 0,
+ G_ADD_PRIVATE_DYNAMIC (GeditBookmarksAppActivatable)
+ G_IMPLEMENT_INTERFACE_DYNAMIC (GEDIT_TYPE_APP_ACTIVATABLE,
+ gedit_app_activatable_iface_init))
+
+static void
+gedit_bookmarks_app_activatable_dispose (GObject *object)
+{
+ GeditBookmarksAppActivatable *activatable = GEDIT_BOOKMARKS_APP_ACTIVATABLE (object);
+ GeditBookmarksAppActivatablePrivate *priv = gedit_bookmarks_app_activatable_get_instance_private
(activatable);
+
+ g_clear_object (&priv->app);
+
+ G_OBJECT_CLASS (gedit_bookmarks_app_activatable_parent_class)->dispose (object);
+}
+
+static void
+gedit_bookmarks_app_activatable_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GeditBookmarksAppActivatable *activatable = GEDIT_BOOKMARKS_APP_ACTIVATABLE (object);
+ GeditBookmarksAppActivatablePrivate *priv = gedit_bookmarks_app_activatable_get_instance_private
(activatable);
+
+ switch (prop_id)
+ {
+ case PROP_APP:
+ priv->app = GEDIT_APP (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gedit_bookmarks_app_activatable_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GeditBookmarksAppActivatable *activatable = GEDIT_BOOKMARKS_APP_ACTIVATABLE (object);
+ GeditBookmarksAppActivatablePrivate *priv = gedit_bookmarks_app_activatable_get_instance_private
(activatable);
+
+ switch (prop_id)
+ {
+ case PROP_APP:
+ g_value_set_object (value, priv->app);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gedit_bookmarks_app_activatable_class_init (GeditBookmarksAppActivatableClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = gedit_bookmarks_app_activatable_dispose;
+ object_class->set_property = gedit_bookmarks_app_activatable_set_property;
+ object_class->get_property = gedit_bookmarks_app_activatable_get_property;
+
+ g_object_class_override_property (object_class, PROP_APP, "app");
+}
+
+static void
+gedit_bookmarks_app_activatable_class_finalize (GeditBookmarksAppActivatableClass *klass)
+{
+}
+
+static void
+gedit_bookmarks_app_activatable_init (GeditBookmarksAppActivatable *self)
+{
+}
+
+static void
+gedit_bookmarks_app_activatable_activate (GeditAppActivatable *activatable)
+{
+ GeditBookmarksAppActivatable *app_activatable = GEDIT_BOOKMARKS_APP_ACTIVATABLE (activatable);
+ GeditBookmarksAppActivatablePrivate *priv = gedit_bookmarks_app_activatable_get_instance_private
(app_activatable);
+
+ gtk_application_add_accelerator (GTK_APPLICATION (priv->app), "<Primary><Alt>B",
"win.bookmark-toggle", NULL);
+ gtk_application_add_accelerator (GTK_APPLICATION (priv->app), "<Primary>B", "win.bookmark-next",
NULL);
+ gtk_application_add_accelerator (GTK_APPLICATION (priv->app), "<Primary><Shift>B",
"win.bookmark-prev", NULL);
+}
+
+static void
+gedit_bookmarks_app_activatable_deactivate (GeditAppActivatable *activatable)
+{
+ GeditBookmarksAppActivatable *app_activatable = GEDIT_BOOKMARKS_APP_ACTIVATABLE (activatable);
+ GeditBookmarksAppActivatablePrivate *priv = gedit_bookmarks_app_activatable_get_instance_private
(app_activatable);
+
+ gtk_application_remove_accelerator (GTK_APPLICATION (priv->app), "win.bookmark-toggle", NULL);
+ gtk_application_remove_accelerator (GTK_APPLICATION (priv->app), "win.bookmark-next", NULL);
+ gtk_application_remove_accelerator (GTK_APPLICATION (priv->app), "win.bookmark-prev", NULL);
+}
+
+static void
+gedit_app_activatable_iface_init (GeditAppActivatableInterface *iface)
+{
+ iface->activate = gedit_bookmarks_app_activatable_activate;
+ iface->deactivate = gedit_bookmarks_app_activatable_deactivate;
+}
+
+void
+gedit_bookmarks_app_activatable_register (GTypeModule *module)
+{
+ gedit_bookmarks_app_activatable_register_type (module);
+
+ peas_object_module_register_extension_type (PEAS_OBJECT_MODULE (module),
+ GEDIT_TYPE_APP_ACTIVATABLE,
+ GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE);
+}
+
+/* ex:ts=8:noet: */
diff --git a/plugins/bookmarks/gedit-bookmarks-app-activatable.h
b/plugins/bookmarks/gedit-bookmarks-app-activatable.h
new file mode 100644
index 0000000..96e394a
--- /dev/null
+++ b/plugins/bookmarks/gedit-bookmarks-app-activatable.h
@@ -0,0 +1,56 @@
+/*
+ * gedit-bookmarks-app-activatable.h
+ * This file is part of gedit
+ *
+ * Copyright (C) 2014 - Ignacio Casal Quinteiro
+ *
+ * gedit 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.
+ *
+ * gedit 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 gedit. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef __GEDIT_BOOKMARKS_APP_ACTIVATABLE_H__
+#define __GEDIT_BOOKMARKS_APP_ACTIVATABLE_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE (gedit_bookmarks_app_activatable_get_type ())
+#define GEDIT_BOOKMARKS_APP_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE, GeditBookmarksAppActivatable))
+#define GEDIT_BOOKMARKS_APP_ACTIVATABLE_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE, GeditBookmarksAppActivatable const))
+#define GEDIT_BOOKMARKS_APP_ACTIVATABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE, GeditBookmarksAppActivatableClass))
+#define GEDIT_IS_BOOKMARKS_APP_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE))
+#define GEDIT_IS_BOOKMARKS_APP_ACTIVATABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE))
+#define GEDIT_BOOKMARKS_APP_ACTIVATABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GEDIT_TYPE_BOOKMARKS_APP_ACTIVATABLE, GeditBookmarksAppActivatableClass))
+
+typedef struct _GeditBookmarksAppActivatable GeditBookmarksAppActivatable;
+typedef struct _GeditBookmarksAppActivatableClass GeditBookmarksAppActivatableClass;
+
+struct _GeditBookmarksAppActivatable
+{
+ GObject parent;
+};
+
+struct _GeditBookmarksAppActivatableClass
+{
+ GObjectClass parent_class;
+};
+
+GType gedit_bookmarks_app_activatable_get_type (void) G_GNUC_CONST;
+
+void gedit_bookmarks_app_activatable_register (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __GEDIT_BOOKMARKS_APP_ACTIVATABLE_H__ */
diff --git a/plugins/bookmarks/gedit-bookmarks-plugin.c b/plugins/bookmarks/gedit-bookmarks-plugin.c
index 2a0a38e..278a681 100644
--- a/plugins/bookmarks/gedit-bookmarks-plugin.c
+++ b/plugins/bookmarks/gedit-bookmarks-plugin.c
@@ -23,6 +23,7 @@
#endif
#include "gedit-bookmarks-plugin.h"
+#include "gedit-bookmarks-app-activatable.h"
#include "messages/messages.h"
#include <stdlib.h>
@@ -81,11 +82,14 @@ static void on_begin_user_action (GtkTextBuffer *buffer,
static void on_end_user_action (GtkTextBuffer *buffer,
InsertData *data);
-static void on_toggle_bookmark_activate (GtkAction *action,
+static void on_toggle_bookmark_activate (GAction *action,
+ GVariant *parameter,
GeditBookmarksPlugin *plugin);
-static void on_next_bookmark_activate (GtkAction *action,
+static void on_next_bookmark_activate (GAction *action,
+ GVariant *parameter,
GeditBookmarksPlugin *plugin);
-static void on_previous_bookmark_activate (GtkAction *action,
+static void on_previous_bookmark_activate (GAction *action,
+ GVariant *parameter,
GeditBookmarksPlugin *plugin);
static void on_tab_added (GeditWindow *window,
GeditTab *tab,
@@ -111,8 +115,10 @@ struct _GeditBookmarksPluginPrivate
{
GeditWindow *window;
- GtkActionGroup *action_group;
- guint ui_id;
+ GSimpleAction *action_toggle;
+ GSimpleAction *action_next;
+ GSimpleAction *action_prev;
+ GeditMenuExtension *menu;
};
enum
@@ -133,20 +139,15 @@ static void
gedit_bookmarks_plugin_dispose (GObject *object)
{
GeditBookmarksPlugin *plugin = GEDIT_BOOKMARKS_PLUGIN (object);
+ GeditBookmarksPluginPrivate *priv = plugin->priv;
gedit_debug_message (DEBUG_PLUGINS, "GeditBookmarksPlugin disposing");
- if (plugin->priv->action_group != NULL)
- {
- g_object_unref (plugin->priv->action_group);
- plugin->priv->action_group = NULL;
- }
-
- if (plugin->priv->window != NULL)
- {
- g_object_unref (plugin->priv->window);
- plugin->priv->window = NULL;
- }
+ g_clear_object (&priv->action_toggle);
+ g_clear_object (&priv->action_next);
+ g_clear_object (&priv->action_prev);
+ g_clear_object (&priv->menu);
+ g_clear_object (&priv->window);
G_OBJECT_CLASS (gedit_bookmarks_plugin_parent_class)->dispose (object);
}
@@ -197,76 +198,57 @@ free_insert_data (InsertData *data)
g_slice_free (InsertData, data);
}
-static GtkActionEntry const action_entries[] = {
- {"ToggleBookmark", NULL, N_("Toggle Bookmark"), "<Control><Alt>B",
- N_("Toggle bookmark status of the current line"),
- G_CALLBACK (on_toggle_bookmark_activate)},
- {"NextBookmark", NULL, N_("Goto Next Bookmark"), "<Control>B",
- N_("Goto the next bookmark"),
- G_CALLBACK (on_next_bookmark_activate)},
- {"PreviousBookmark", NULL, N_("Goto Previous Bookmark"), "<Control><Shift>B",
- N_("Goto the previous bookmark"),
- G_CALLBACK (on_previous_bookmark_activate)}
-};
-
-static gchar const uidefinition[] = ""
-"<ui>"
-" <menubar name='MenuBar'>"
-" <menu name='EditMenu' action='Edit'>"
-" <placeholder name='EditOps_6'>"
-" <menuitem action='ToggleBookmark'/>"
-" <menuitem action='PreviousBookmark'/>"
-" <menuitem action='NextBookmark'/>"
-" </placeholder>"
-" </menu>"
-" </menubar>"
-"</ui>";
-
static void
install_menu (GeditBookmarksPlugin *plugin)
{
GeditBookmarksPluginPrivate *priv;
- GtkUIManager *manager;
- GError *error = NULL;
+ GMenuItem *item;
priv = plugin->priv;
- manager = gedit_window_get_ui_manager (priv->window);
- priv->action_group = gtk_action_group_new ("GeditBookmarksPluginActions");
-
- gtk_action_group_set_translation_domain (priv->action_group,
- GETTEXT_PACKAGE);
-
- gtk_action_group_add_actions (priv->action_group,
- action_entries,
- G_N_ELEMENTS (action_entries),
- plugin);
-
- gtk_ui_manager_insert_action_group (manager, priv->action_group, -1);
- priv->ui_id = gtk_ui_manager_add_ui_from_string (manager, uidefinition, -1, &error);
-
- if (!priv->ui_id)
- {
- g_warning ("Could not load UI: %s", error->message);
- g_error_free (error);
- }
+ priv->action_toggle = g_simple_action_new ("bookmark-toggle", NULL);
+ g_signal_connect (priv->action_toggle, "activate",
+ G_CALLBACK (on_toggle_bookmark_activate), plugin);
+ g_action_map_add_action (G_ACTION_MAP (priv->window),
+ G_ACTION (priv->action_toggle));
+
+ priv->action_next = g_simple_action_new ("bookmark-next", NULL);
+ g_signal_connect (priv->action_next, "activate",
+ G_CALLBACK (on_next_bookmark_activate), plugin);
+ g_action_map_add_action (G_ACTION_MAP (priv->window),
+ G_ACTION (priv->action_next));
+
+ priv->action_prev = g_simple_action_new ("bookmark-prev", NULL);
+ g_signal_connect (priv->action_prev, "activate",
+ G_CALLBACK (on_previous_bookmark_activate), plugin);
+ g_action_map_add_action (G_ACTION_MAP (priv->window),
+ G_ACTION (priv->action_prev));
+
+ priv->menu = gedit_window_activatable_extend_gear_menu (GEDIT_WINDOW_ACTIVATABLE (plugin),
+ "ext3");
+ item = g_menu_item_new (_("Toggle Bookmark"), "win.bookmark-toggle");
+ gedit_menu_extension_append_menu_item (priv->menu, item);
+ g_object_unref (item);
+
+ item = g_menu_item_new (_("Goto Next Bookmark"), "win.bookmark-next");
+ gedit_menu_extension_append_menu_item (priv->menu, item);
+ g_object_unref (item);
+
+ item = g_menu_item_new (_("Goto Previous Bookmark"), "win.bookmark-prev");
+ gedit_menu_extension_append_menu_item (priv->menu, item);
+ g_object_unref (item);
}
static void
uninstall_menu (GeditBookmarksPlugin *plugin)
{
GeditBookmarksPluginPrivate *priv;
- GtkUIManager *manager;
priv = plugin->priv;
- manager = gedit_window_get_ui_manager (priv->window);
-
- gtk_ui_manager_remove_ui (manager, priv->ui_id);
- gtk_ui_manager_remove_action_group (manager, priv->action_group);
-
- g_object_unref (priv->action_group);
- priv->action_group = NULL;
+ g_action_map_remove_action (G_ACTION_MAP (priv->window), "bookmark-toggle");
+ g_action_map_remove_action (G_ACTION_MAP (priv->window), "bookmark-next");
+ g_action_map_remove_action (G_ACTION_MAP (priv->window), "bookmark-prev");
}
static void
@@ -782,10 +764,15 @@ static void
gedit_bookmarks_plugin_update_state (GeditWindowActivatable *activatable)
{
GeditBookmarksPluginPrivate *priv;
+ gboolean enabled;
priv = GEDIT_BOOKMARKS_PLUGIN (activatable)->priv;
- gtk_action_group_set_sensitive (priv->action_group,
- gedit_window_get_active_view (priv->window) != NULL);
+
+ enabled = gedit_window_get_active_view (priv->window) != NULL;
+
+ g_simple_action_set_enabled (priv->action_toggle, enabled);
+ g_simple_action_set_enabled (priv->action_next, enabled);
+ g_simple_action_set_enabled (priv->action_prev, enabled);
}
static void
@@ -1135,8 +1122,9 @@ toggle_bookmark (GtkSourceBuffer *buffer,
}
static void
-on_toggle_bookmark_activate (GtkAction *action,
- GeditBookmarksPlugin *plugin)
+on_toggle_bookmark_activate (GAction *action,
+ GVariant *parameter,
+ GeditBookmarksPlugin *plugin)
{
GtkSourceBuffer *buffer;
@@ -1146,8 +1134,9 @@ on_toggle_bookmark_activate (GtkAction *action,
}
static void
-on_next_bookmark_activate (GtkAction *action,
- GeditBookmarksPlugin *plugin)
+on_next_bookmark_activate (GAction *action,
+ GVariant *parameter,
+ GeditBookmarksPlugin *plugin)
{
goto_bookmark (plugin->priv->window,
NULL,
@@ -1157,8 +1146,9 @@ on_next_bookmark_activate (GtkAction *action,
}
static void
-on_previous_bookmark_activate (GtkAction *action,
- GeditBookmarksPlugin *plugin)
+on_previous_bookmark_activate (GAction *action,
+ GVariant *parameter,
+ GeditBookmarksPlugin *plugin)
{
goto_bookmark (plugin->priv->window,
NULL,
@@ -1242,6 +1232,7 @@ G_MODULE_EXPORT void
peas_register_types (PeasObjectModule *module)
{
gedit_bookmarks_plugin_register_type (G_TYPE_MODULE (module));
+ gedit_bookmarks_app_activatable_register (G_TYPE_MODULE (module));
peas_object_module_register_extension_type (module,
GEDIT_TYPE_WINDOW_ACTIVATABLE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]