diff options
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/eom-application-activatable.c | 86 | ||||
| -rw-r--r-- | src/eom-application-activatable.h | 70 | ||||
| -rw-r--r-- | src/eom-application.c | 33 | ||||
| -rw-r--r-- | src/eom-application.h | 4 | 
5 files changed, 195 insertions, 0 deletions
| diff --git a/src/Makefile.am b/src/Makefile.am index 0bfb4d2..79fe623 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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			\ diff --git a/src/eom-application-activatable.c b/src/eom-application-activatable.c new file mode 100644 index 0000000..5433ad5 --- /dev/null +++ b/src/eom-application-activatable.c @@ -0,0 +1,86 @@ +/* + * eom-application-activatable.c + * This file is part of eom + * + * Author: Felix Riemann <[email protected]> + * + * Copyright (C) 2012 Felix Riemann + *  + * Base on code by: + * 	- Steve Frécinaux <[email protected]> + * + * 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); +} + diff --git a/src/eom-application-activatable.h b/src/eom-application-activatable.h new file mode 100644 index 0000000..5ab09dc --- /dev/null +++ b/src/eom-application-activatable.h @@ -0,0 +1,70 @@ +/* + * eom-application-activatable.h + * This file is part of eom + * + * Author: Felix Riemann <[email protected]> + * + * Copyright (C) 2012 Felix Riemann + *  + * Base on code by: + * 	- Steve Frécinaux <[email protected]> + * + * 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__ */ + diff --git a/src/eom-application.c b/src/eom-application.c index 6135ae1..1ab52d1 100644 --- a/src/eom-application.c +++ b/src/eom-application.c @@ -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; @@ -147,6 +151,24 @@ eom_application_class_init (EomApplicationClass *eom_application_class)  }  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)  {  	const gchar *dot_dir = eom_util_dot_dir (); @@ -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);  }  /** diff --git a/src/eom-application.h b/src/eom-application.h index 16c4419..01e8887 100644 --- a/src/eom-application.h +++ b/src/eom-application.h @@ -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 { | 
