Skip to content
Permalink
Browse files

Add new plugin hook for per-application plugins

These will be loaded on application initialization and disabled
once the application is disposed.

origin commit:
https://gitlab.gnome.org/GNOME/eog/commit/cdfe77e
  • Loading branch information...
Felix Riemann authored and raveit65 committed Aug 12, 2012
1 parent 57506ff commit bb3b0c0a009cbf5f699a37c656b43bdc5a12b7b0
Showing with 195 additions and 0 deletions.
  1. +2 −0 src/Makefile.am
  2. +86 −0 src/eom-application-activatable.c
  3. +70 −0 src/eom-application-activatable.h
  4. +33 −0 src/eom-application.c
  5. +4 −0 src/eom-application.h
@@ -38,6 +38,7 @@ NOINST_H_FILES = \

INST_H_FILES = \
eom-application.h \
eom-application-activatable.h \
eom-debug.h \
eom-window.h \
eom-window-activatable.h \
@@ -62,6 +63,7 @@ INST_H_FILES = \

libeom_c_files = \
eom-application.c \
eom-application-activatable.c \
eom-session.c \
eom-debug.c \
eom-util.c \
@@ -0,0 +1,86 @@
/*
* eom-application-activatable.c
* This file is part of eom
*
* Author: Felix Riemann <friemann@gnome.org>
*
* Copyright (C) 2012 Felix Riemann
*
* Base on code by:
* - Steve Frécinaux <code@istique.net>
*
* 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.
*/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "eom-application-activatable.h"

#include <glib-object.h>
#include "eom-application.h"

G_DEFINE_INTERFACE(EomApplicationActivatable, eom_application_activatable, G_TYPE_OBJECT)

void
eom_application_activatable_default_init (EomApplicationActivatableInterface *iface)
{
static gboolean initialized = FALSE;

if (!initialized) {
/**
* EomApplicationActivatable:app:
*
* This is the #EomApplication this #EomApplicationActivatable instance
* should be attached to.
*/
g_object_interface_install_property (iface,
g_param_spec_object ("app", "Application",
"The EomApplication this instance it attached to",
EOM_TYPE_APPLICATION,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
initialized = TRUE;
}
}

void
eom_application_activatable_activate (EomApplicationActivatable *activatable)
{
EomApplicationActivatableInterface *iface;

g_return_if_fail (EOM_IS_APPLICATION_ACTIVATABLE (activatable));

iface = EOM_APPLICATION_ACTIVATABLE_GET_IFACE (activatable);

if (G_LIKELY (iface->activate != NULL))
iface->activate (activatable);
}

void
eom_application_activatable_deactivate (EomApplicationActivatable *activatable)
{
EomApplicationActivatableInterface *iface;

g_return_if_fail (EOM_IS_APPLICATION_ACTIVATABLE (activatable));

iface = EOM_APPLICATION_ACTIVATABLE_GET_IFACE (activatable);

if (G_LIKELY (iface->deactivate != NULL))
iface->deactivate (activatable);
}

@@ -0,0 +1,70 @@
/*
* eom-application-activatable.h
* This file is part of eom
*
* Author: Felix Riemann <friemann@gnome.org>
*
* Copyright (C) 2012 Felix Riemann
*
* Base on code by:
* - Steve Frécinaux <code@istique.net>
*
* 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.
*/

#ifndef __EOM_APPLICATION_ACTIVATABLE_H__
#define __EOM_APPLICATION_ACTIVATABLE_H__

#include <glib-object.h>

G_BEGIN_DECLS

#define EOM_TYPE_APPLICATION_ACTIVATABLE (eom_application_activatable_get_type ())
#define EOM_APPLICATION_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
EOM_TYPE_APPLICATION_ACTIVATABLE, \
EomApplicationActivatable))
#define EOM_APPLICATION_ACTIVATABLE_IFACE(obj) \
(G_TYPE_CHECK_CLASS_CAST ((obj), \
EOM_TYPE_APPLICATION_ACTIVATABLE, \
EomApplicationActivatableInterface))
#define EOM_IS_APPLICATION_ACTIVATABLE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
EOM_TYPE_APPLICATION_ACTIVATABLE))
#define EOM_APPLICATION_ACTIVATABLE_GET_IFACE(obj) \
(G_TYPE_INSTANCE_GET_INTERFACE ((obj), \
EOM_TYPE_APPLICATION_ACTIVATABLE, \
EomApplicationActivatableInterface))

typedef struct _EomApplicationActivatable EomApplicationActivatable;
typedef struct _EomApplicationActivatableInterface EomApplicationActivatableInterface;

struct _EomApplicationActivatableInterface
{
GTypeInterface g_iface;

/* vfuncs */

void (*activate) (EomApplicationActivatable *activatable);
void (*deactivate) (EomApplicationActivatable *activatable);
};

GType eom_application_activatable_get_type (void) G_GNUC_CONST;

void eom_application_activatable_activate (EomApplicationActivatable *activatable);
void eom_application_activatable_deactivate (EomApplicationActivatable *activatable);

G_END_DECLS
#endif /* __EOM_APPLICATION_ACTIVATABLE_H__ */

@@ -30,6 +30,7 @@
#include "eom-session.h"
#include "eom-window.h"
#include "eom-application.h"
#include "eom-application-activatable.h"
#include "eom-util.h"

#include <string.h>
@@ -86,6 +87,9 @@ eom_application_finalize (GObject *object)
g_free (application->toolbars_file);
application->toolbars_file = NULL;
}

g_clear_object (&application->extensions);

if (application->plugin_engine) {
g_object_unref (application->plugin_engine);
application->plugin_engine = NULL;
@@ -146,6 +150,24 @@ eom_application_class_init (EomApplicationClass *eom_application_class)
application_class->before_emit = eom_application_before_emit;
}

static void
on_extension_added (PeasExtensionSet *set,
PeasPluginInfo *info,
PeasExtension *exten,
EomApplication *app)
{
eom_application_activatable_activate (EOM_APPLICATION_ACTIVATABLE (exten));
}

static void
on_extension_removed (PeasExtensionSet *set,
PeasPluginInfo *info,
PeasExtension *exten,
EomApplication *app)
{
eom_application_activatable_deactivate (EOM_APPLICATION_ACTIVATABLE (exten));
}

static void
eom_application_init (EomApplication *eom_application)
{
@@ -175,6 +197,17 @@ eom_application_init (EomApplication *eom_application)
EGG_TB_MODEL_NOT_REMOVABLE);

eom_application_load_accelerators ();

eom_application->extensions = peas_extension_set_new (
PEAS_ENGINE (eom_application->plugin_engine),
EOM_TYPE_APPLICATION_ACTIVATABLE,
"app", EOM_APPLICATION (eom_application),
NULL);
peas_extension_set_call (eom_application->extensions, "activate");
g_signal_connect (eom_application->extensions, "extension-added",
G_CALLBACK (on_extension_added), eom_application);
g_signal_connect (eom_application->extensions, "extension-removed",
G_CALLBACK (on_extension_removed), eom_application);
}

/**
@@ -32,6 +32,8 @@
#include <glib.h>
#include <glib-object.h>

#include <libpeas/peas-extension-set.h>

G_BEGIN_DECLS

typedef struct _EomApplication EomApplication;
@@ -56,6 +58,8 @@ struct _EomApplication {
EomPluginEngine *plugin_engine;

EomStartupFlags flags;

PeasExtensionSet *extensions;
};

struct _EomApplicationClass {

0 comments on commit bb3b0c0

Please sign in to comment.
You can’t perform that action at this time.