grim/guifications3
Clone
Summary
Browse
Changes
Graph
moved gflib-gtk to the new cmake module
cmake
2010-12-15, Gary Kramlich
b6418db658c1
moved gflib-gtk to the new cmake module
/*
* Guifications - The end-all, be-all notification framework
* Copyright (C) 2003-2009 Gary Kramlich <grim@reaperworld.com>
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
#if HAVE_CONFIG_H
#
include
<config.h>
#endif
/* HAVE_CONFIG_H */
#include
<gmodule.h>
#include
<string.h>
#include
<gflib/gf_intl.h>
#include
<gflib/gf_log.h>
#include
<gflib/gf_plugin.h>
#include
<gflib/gf_private.h>
#define GF_PLUGIN_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), GF_TYPE_PLUGIN, GfPluginPrivate))
/******************************************************************************
* Structs
*****************************************************************************/
typedef
struct
{
GfPluginState
state
;
gchar
*
filename
;
GfPluginInfo
*
info
;
}
GfPluginPrivate
;
/******************************************************************************
* Enums
*****************************************************************************/
enum
{
PROP_ZERO
=
0
,
PROP_FILENAME
,
PROP_INFO
,
PROP_STATE
,
PROP_LAST
};
/******************************************************************************
* Globals
*****************************************************************************/
static
GfObjectClass
*
parent_class
=
NULL
;
/******************************************************************************
* Helpers
*****************************************************************************/
static
void
gf_plugin_set_filename
(
GfPlugin
*
plugin
,
const
gchar
*
filename
)
{
GfPluginPrivate
*
priv
=
GF_PLUGIN_GET_PRIVATE
(
plugin
);
if
(
priv
->
filename
)
g_free
(
priv
->
filename
);
priv
->
filename
=
(
filename
)
?
g_strdup
(
filename
)
:
NULL
;
}
static
void
gf_plugin_set_info
(
GfPlugin
*
plugin
,
GfPluginInfo
*
info
)
{
GfPluginPrivate
*
priv
=
GF_PLUGIN_GET_PRIVATE
(
plugin
);
if
(
priv
->
info
)
gf_plugin_info_free
(
priv
->
info
);
priv
->
info
=
gf_plugin_info_copy
(
info
);
}
/******************************************************************************
* Object Stuff
*****************************************************************************/
static
void
gf_plugin_get_property
(
GObject
*
obj
,
guint
param_id
,
GValue
*
value
,
GParamSpec
*
psec
)
{
GfPlugin
*
plugin
=
GF_PLUGIN
(
obj
);
switch
(
param_id
)
{
case
PROP_FILENAME
:
g_value_set_string
(
value
,
gf_plugin_get_filename
(
plugin
));
break
;
case
PROP_INFO
:
g_value_set_boxed
(
value
,
gf_plugin_get_info
(
plugin
));
break
;
case
PROP_STATE
:
g_value_set_enum
(
value
,
gf_plugin_get_state
(
plugin
));
break
;
default
:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
obj
,
param_id
,
psec
);
break
;
}
}
static
void
gf_plugin_set_property
(
GObject
*
obj
,
guint
param_id
,
const
GValue
*
value
,
GParamSpec
*
psec
)
{
GfPlugin
*
plugin
=
GF_PLUGIN
(
obj
);
switch
(
param_id
)
{
case
PROP_FILENAME
:
gf_plugin_set_filename
(
plugin
,
g_value_get_string
(
value
));
break
;
case
PROP_INFO
:
gf_plugin_set_info
(
plugin
,
g_value_get_boxed
(
value
));
break
;
case
PROP_STATE
:
gf_plugin_set_state
(
plugin
,
g_value_get_enum
(
value
));
break
;
default
:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
obj
,
param_id
,
psec
);
break
;
}
}
static
void
gf_plugin_finalize
(
GObject
*
obj
)
{
G_OBJECT_CLASS
(
parent_class
)
->
finalize
(
obj
);
}
static
void
gf_plugin_class_init
(
GfPluginClass
*
klass
)
{
GObjectClass
*
obj_class
=
G_OBJECT_CLASS
(
klass
);
parent_class
=
g_type_class_peek_parent
(
klass
);
g_type_class_add_private
(
klass
,
sizeof
(
GfPluginPrivate
));
obj_class
->
finalize
=
gf_plugin_finalize
;
obj_class
->
get_property
=
gf_plugin_get_property
;
obj_class
->
set_property
=
gf_plugin_set_property
;
g_object_class_install_property
(
obj_class
,
PROP_FILENAME
,
g_param_spec_string
(
"filename"
,
P_
(
"The filename"
),
P_
(
"The plugin's filename."
),
NULL
,
G_PARAM_READWRITE
|
G_PARAM_CONSTRUCT_ONLY
));
g_object_class_install_property
(
obj_class
,
PROP_INFO
,
g_param_spec_boxed
(
"info"
,
P_
(
"The plugin info"
),
P_
(
"The GfPluginInfo for this plugin."
),
GF_TYPE_PLUGIN_INFO
,
G_PARAM_READWRITE
|
G_PARAM_CONSTRUCT_ONLY
));
g_object_class_install_property
(
obj_class
,
PROP_STATE
,
g_param_spec_enum
(
"state"
,
P_
(
"The plugin state"
),
P_
(
"The GfPluginState for this plugin."
),
GF_TYPE_PLUGIN_STATE
,
GF_PLUGIN_STATE_NOT_LOADED
,
G_PARAM_READABLE
));
}
/******************************************************************************
* API
*****************************************************************************/
GType
gf_plugin_get_type
(
void
)
{
static
GType
type
=
0
;
if
(
type
==
0
)
{
static
const
GTypeInfo
info
=
{
sizeof
(
GfPluginClass
),
NULL
,
NULL
,
(
GClassInitFunc
)
gf_plugin_class_init
,
NULL
,
NULL
,
sizeof
(
GfPlugin
),
0
,
NULL
,
};
type
=
g_type_register_static
(
GF_TYPE_OBJECT
,
"GfPlugin"
,
&
info
,
G_TYPE_FLAG_ABSTRACT
);
}
return
type
;
}
/**
* gf_plugin_get_filename:
* @plugin : The #GfPlugin instance.
*
* Gets the filename for @plugin.
*
* Return Value: The filename for @plugin.
*/
const
gchar
*
gf_plugin_get_filename
(
const
GfPlugin
*
plugin
)
{
GfPluginPrivate
*
priv
=
NULL
;
g_return_val_if_fail
(
GF_IS_PLUGIN
(
plugin
),
NULL
);
priv
=
GF_PLUGIN_GET_PRIVATE
(
plugin
);
return
priv
->
filename
;
}
/**
* gf_plugin_get_info:
* @plugin : The #GfPlugin instance.
*
* Gets the #GfPluginInfo for @plugin.
*
* Return Value: The #GfPluginInfo for @plugin or NULL.
*/
GfPluginInfo
*
gf_plugin_get_info
(
GfPlugin
*
plugin
)
{
GfPluginPrivate
*
priv
=
NULL
;
g_return_val_if_fail
(
GF_IS_PLUGIN
(
plugin
),
NULL
);
priv
=
GF_PLUGIN_GET_PRIVATE
(
plugin
);
return
priv
->
info
;
}
/**
* gf_plugin_get_state:
* @plugin : The #GfPlugin instance.
*
* Gets the #GfPluginState of @plugin.
*
* Return Value: The #GfPluginState of @plugin or NULL.
*/
GfPluginState
gf_plugin_get_state
(
GfPlugin
*
plugin
)
{
GfPluginPrivate
*
priv
=
NULL
;
g_return_val_if_fail
(
GF_IS_PLUGIN
(
plugin
),
GF_PLUGIN_STATE_UNKNOWN
);
priv
=
GF_PLUGIN_GET_PRIVATE
(
plugin
);
return
priv
->
state
;
}
/* from gf_private.h */
void
gf_plugin_set_state
(
GfPlugin
*
plugin
,
GfPluginState
state
)
{
GfPluginPrivate
*
priv
=
NULL
;
g_return_if_fail
(
GF_IS_PLUGIN
(
plugin
));
priv
=
GF_PLUGIN_GET_PRIVATE
(
plugin
);
priv
->
state
=
state
;
g_object_notify
(
G_OBJECT
(
plugin
),
"state"
);
}