Skip to content
Permalink
Browse files

Add our own activatable interface to EomWindow

Improves typesafety by explicitly passing the EomWindow
and allows us to extend the interface if necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=626091

origin commit:
https://gitlab.gnome.org/GNOME/eog/commit/397a6a5
  • Loading branch information...
Felix Riemann authored and raveit65 committed Jan 2, 2011
1 parent 17e6cdb commit 026b114ae5839cdb61524639a91e111e5f15e369
Showing with 162 additions and 2 deletions.
  1. +2 −0 src/Makefile.am
  2. +87 −0 src/eom-window-activatable.c
  3. +69 −0 src/eom-window-activatable.h
  4. +4 −2 src/eom-window.c
@@ -40,6 +40,7 @@ INST_H_FILES = \
eom-application.h \
eom-debug.h \
eom-window.h \
eom-window-activatable.h \
eom-sidebar.h \
eom-dialog.h \
eom-properties-dialog.h \
@@ -66,6 +67,7 @@ libeom_c_files = \
eom-util.c \
eom-pixbuf-util.c \
eom-window.c \
eom-window-activatable.c \
eom-sidebar.c \
eom-dialog.c \
eom-preferences-dialog.c \
@@ -0,0 +1,87 @@
/*
* eom-window-activatable.c
* This file is part of eom
*
* Author: Felix Riemann <friemann@gnome.org>
*
* Copyright (C) 2011 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-window-activatable.h"

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

G_DEFINE_INTERFACE(EomWindowActivatable, eom_window_activatable, G_TYPE_OBJECT)

void
eom_window_activatable_default_init (EomWindowActivatableInterface *iface)
{
static gboolean initialized = FALSE;

if (!initialized) {
/**
* EomWindowActivatable:window:
*
* This is the #EomWindow this #EomWindowActivatable instance
* should be attached to.
*/
g_object_interface_install_property (iface,
g_param_spec_object ("window", "Window",
"The EomWindow this "
"instance it attached to",
EOM_TYPE_WINDOW,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
initialized = TRUE;
}
}

void
eom_window_activatable_activate (EomWindowActivatable *activatable)
{
EomWindowActivatableInterface *iface;

g_return_if_fail (EOM_IS_WINDOW_ACTIVATABLE (activatable));

iface = EOM_WINDOW_ACTIVATABLE_GET_IFACE (activatable);

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

void
eom_window_activatable_deactivate (EomWindowActivatable *activatable)
{
EomWindowActivatableInterface *iface;

g_return_if_fail (EOM_IS_WINDOW_ACTIVATABLE (activatable));

iface = EOM_WINDOW_ACTIVATABLE_GET_IFACE (activatable);

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

@@ -0,0 +1,69 @@
/*
* eom-window-activatable.h
* This file is part of eom
*
* Author: Felix Riemann <friemann@gnome.org>
*
* Copyright (C) 2011 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_WINDOW_ACTIVATABLE_H__
#define __EOM_WINDOW_ACTIVATABLE_H__

#include <glib-object.h>

G_BEGIN_DECLS

#define EOM_TYPE_WINDOW_ACTIVATABLE (eom_window_activatable_get_type ())
#define EOM_WINDOW_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
EOM_TYPE_WINDOW_ACTIVATABLE, \
EomWindowActivatable))
#define EOM_WINDOW_ACTIVATABLE_IFACE(obj) \
(G_TYPE_CHECK_CLASS_CAST ((obj), \
EOM_TYPE_WINDOW_ACTIVATABLE, \
EomWindowActivatableInterface))
#define EOM_IS_WINDOW_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
EOM_TYPE_WINDOW_ACTIVATABLE))
#define EOM_WINDOW_ACTIVATABLE_GET_IFACE(obj) \
(G_TYPE_INSTANCE_GET_INTERFACE ((obj), \
EOM_TYPE_WINDOW_ACTIVATABLE, \
EomWindowActivatableInterface))

typedef struct _EomWindowActivatable EomWindowActivatable;
typedef struct _EomWindowActivatableInterface EomWindowActivatableInterface;

struct _EomWindowActivatableInterface
{
GTypeInterface g_iface;

/* vfuncs */

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

GType eom_window_activatable_get_type (void) G_GNUC_CONST;

void eom_window_activatable_activate (EomWindowActivatable *activatable);
void eom_window_activatable_deactivate (EomWindowActivatable *activatable);

G_END_DECLS
#endif /* __EOM_WINDOW_ACTIVATABLE_H__ */

@@ -52,6 +52,7 @@
#include "eom-save-as-dialog-helper.h"
#include "eom-close-confirmation-dialog.h"
#include "eom-clipboard-handler.h"
#include "eom-window-activatable.h"
#include "eom-metadata-sidebar.h"

#include "eom-enum-types.h"
@@ -5127,8 +5128,9 @@ eom_window_constructor (GType type,
eom_window_construct_ui (EOM_WINDOW (object));

priv->extensions = peas_extension_set_new (PEAS_ENGINE (EOM_APP->plugin_engine),
PEAS_TYPE_ACTIVATABLE,
"object", object, NULL);
EOM_TYPE_WINDOW_ACTIVATABLE,
"window",
EOM_WINDOW (object), NULL);

peas_extension_set_call (priv->extensions, "activate");

0 comments on commit 026b114

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