--- a/gplugin-gtk/gplugin-gtk-plugin-info.c Mon Oct 01 21:42:52 2018 -0500
+++ b/gplugin-gtk/gplugin-gtk-plugin-info.c Mon Oct 01 23:44:17 2018 -0500
@@ -27,16 +27,26 @@
* #GPluginGtkPluginInfo is a Gtk+ widget that shows information about plugins.
-#define GPLUGIN_GTK_PLUGIN_INFO_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), GPLUGIN_GTK_TYPE_PLUGIN_INFO, GPluginGtkPluginInfoPrivate))
/******************************************************************************
*****************************************************************************/
+ GtkWidget *authors_box; + GtkWidget *description; + GtkWidget *dependencies; + GtkWidget *abi_version; + GtkWidget *load_on_query; } GPluginGtkPluginInfoPrivate;
/*****************************************************************************s
@@ -47,13 +57,16 @@
+static GParamSpec *properties[N_PROPERTIES] = {NULL,}; +G_DEFINE_TYPE_WITH_PRIVATE(GPluginGtkPluginInfo, gplugin_gtk_plugin_info, GTK_TYPE_BOX); /******************************************************************************
*****************************************************************************/
-_gplugin_gtk_plugin_info_expander_activate_cb(GtkExpander *expander,
- GPLUGIN_UNUSED gpointer data)
+gplugin_gtk_plugin_info_expander_activate(GtkExpander *expander, + GPLUGIN_UNUSED gpointer data) if(gtk_expander_get_expanded(expander))
gtk_expander_set_label(expander, "More");
@@ -68,22 +81,19 @@
_gplugin_gtk_plugin_info_refresh(GPluginGtkPluginInfoPrivate *priv,
- GtkWidget *authors_grid = NULL, *widget = NULL;
+ GtkWidget *widget = NULL; GList *children = NULL, *iter = NULL;
gchar *name = NULL, *version = NULL, *website = NULL;
- gchar *description = NULL, *id = NULL, *abi_version = NULL;
+ gchar *summary = NULL, *description = NULL, *id = NULL, *abi_version = NULL; guint32 abi_version_uint;
gboolean loq = FALSE, internal = FALSE;
const gchar *filename = NULL;
- authors_grid = GTK_WIDGET(gtk_builder_get_object(priv->builder,
- /* remove all the children from the authors grid */
- children = gtk_container_get_children(GTK_CONTAINER(authors_grid));
+ /* remove all the children from the authors box */ + children = gtk_container_get_children(GTK_CONTAINER(priv->authors_box)); for(iter = children; iter; iter = iter->next)
gtk_widget_destroy(GTK_WIDGET(iter->data));
@@ -104,6 +114,7 @@
g_object_get(G_OBJECT(plugin_info),
"abi_version", &abi_version_uint,
"description", &description,
@@ -134,13 +145,24 @@
g_object_unref(G_OBJECT(plugin_info));
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "name"));
- gtk_label_set_markup(GTK_LABEL(widget), (name) ? name : "Unnamed");
+ gtk_label_set_markup(GTK_LABEL(priv->name), (name) ? name : "Unnamed"); + gtk_label_set_text(GTK_LABEL(priv->version), (version) ? version : ""); + gtk_label_set_markup(GTK_LABEL(priv->website), (website) ? website : ""); + gtk_label_set_text(GTK_LABEL(priv->summary), (summary) ? summary : ""); + gtk_label_set_text(GTK_LABEL(priv->description), (description) ? description : ""); + gtk_label_set_text(GTK_LABEL(priv->id), (id) ? id : ""); + gtk_label_set_text(GTK_LABEL(priv->filename), (filename) ? filename : ""); + gtk_label_set_text(GTK_LABEL(priv->abi_version), (abi_version) ? abi_version : ""); + gtk_label_set_text(GTK_LABEL(priv->loader), (loader) ? loader : "Unknown"); + gtk_label_set_text(GTK_LABEL(priv->internal), (internal) ? "Yes" : "No"); + gtk_label_set_text(GTK_LABEL(priv->load_on_query), (loq) ? "Yes" : "No");
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "version"));
- gtk_label_set_text(GTK_LABEL(widget), (version) ? version : "");
@@ -150,59 +172,16 @@
widget = gtk_label_new(authors[i]);
gtk_widget_set_halign(widget, GTK_ALIGN_START);
gtk_widget_set_valign(widget, GTK_ALIGN_START);
- gtk_grid_attach(GTK_GRID(authors_grid), widget, 0, i, 1, 1);
+ gtk_box_pack_start(GTK_BOX(priv->authors_box), widget, TRUE, TRUE, 0);
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "website"));
- gtk_label_set_markup(GTK_LABEL(widget), (website) ? website : "");
- /* set the description */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "description"));
- gtk_label_set_text(GTK_LABEL(widget), (description) ? description : "");
- /* set the plugin id */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "id"));
- gtk_label_set_text(GTK_LABEL(widget), (id) ? id : "");
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "filename"));
- gtk_label_set_text(GTK_LABEL(widget), (filename) ? filename : "");
- /* set the abi_version */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "abi_version"));
- gtk_label_set_text(GTK_LABEL(widget), (abi_version) ? abi_version : "");
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "loader"));
- gtk_label_set_text(GTK_LABEL(widget), (loader) ? loader : "Unknown");
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "internal"));
- gtk_label_set_text(GTK_LABEL(widget), (internal) ? "Yes" : "No");
- /* set the load on query label */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder,
- gtk_label_set_text(GTK_LABEL(widget), (loq) ? "Yes" : "No");
/******************************************************************************
*****************************************************************************/
-G_DEFINE_TYPE(GPluginGtkPluginInfo, gplugin_gtk_plugin_info, GTK_TYPE_FRAME);
gplugin_gtk_plugin_info_set_property(GObject *obj, guint prop_id,
const GValue *value, GParamSpec *pspec)
@@ -237,53 +216,60 @@
-gplugin_gtk_plugin_info_constructed(GObject *obj) {
- GPluginGtkPluginInfoPrivate *priv = NULL;
- GtkWidget *widget = NULL;
- gchar *filename = NULL;
- G_OBJECT_CLASS(gplugin_gtk_plugin_info_parent_class)->constructed(obj);
- priv = GPLUGIN_GTK_PLUGIN_INFO_GET_PRIVATE(obj);
+gplugin_gtk_plugin_info_finalize(GObject *obj) { + GPluginGtkPluginInfoPrivate *priv = gplugin_gtk_plugin_info_get_instance_private(GPLUGIN_GTK_PLUGIN_INFO(obj)); - /* load the ui from the GtkBuilder file */
- priv->builder = gtk_builder_new();
- filename = g_build_filename(PREFIX, "share", "gplugin", "gplugin-gtk",
- "gplugin-gtk-plugin-info.ui", NULL);
- gtk_builder_add_from_file(priv->builder, filename, &error);
- g_warning("%s", error->message);
+ if(priv->plugin != NULL) { + g_object_unref(priv->plugin);
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "plugin_info"));
- gtk_container_add(GTK_CONTAINER(obj), widget);
- /* add a callback for the expander */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder,
- g_signal_connect(G_OBJECT(widget), "activate",
- G_CALLBACK(_gplugin_gtk_plugin_info_expander_activate_cb),
+ G_OBJECT_CLASS(gplugin_gtk_plugin_info_parent_class)->finalize(obj); -gplugin_gtk_plugin_info_init(GPLUGIN_UNUSED GPluginGtkPluginInfo *info) {
+gplugin_gtk_plugin_info_init(GPluginGtkPluginInfo *info) { + gtk_widget_init_template(GTK_WIDGET(info)); gplugin_gtk_plugin_info_class_init(GPluginGtkPluginInfoClass *klass) {
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- g_type_class_add_private(obj_class, sizeof(GPluginGtkPluginInfoPrivate));
obj_class->get_property = gplugin_gtk_plugin_info_get_property;
obj_class->set_property = gplugin_gtk_plugin_info_set_property;
- obj_class->constructed = gplugin_gtk_plugin_info_constructed;
+ obj_class->finalize = gplugin_gtk_plugin_info_finalize; + properties[PROP_PLUGIN] = g_param_spec_object( + "The GPluginPlugin who's info should be displayed", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT + gtk_widget_class_set_template_from_resource( + "/org/bitbucket/gplugin/gplugin-gtk/plugin-info.ui" + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, name); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, version); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, authors_box); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, website); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, summary); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, description); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, dependencies); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, expander); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, id); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, filename); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, abi_version); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, loader); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, internal); + gtk_widget_class_bind_template_child_private(widget_class, GPluginGtkPluginInfo, load_on_query); + gtk_widget_class_bind_template_callback(widget_class, gplugin_gtk_plugin_info_expander_activate); /******************************************************************************
@@ -300,13 +286,7 @@
gplugin_gtk_plugin_info_new(void) {
- ret = g_object_new(GPLUGIN_GTK_TYPE_PLUGIN_INFO,
- "shadow-type", GTK_SHADOW_NONE,
- return GTK_WIDGET(ret);
+ return GTK_WIDGET(g_object_new(GPLUGIN_GTK_TYPE_PLUGIN_INFO, NULL)); @@ -326,15 +306,17 @@
g_return_if_fail(GPLUGIN_GTK_IS_PLUGIN_INFO(info));
- priv = GPLUGIN_GTK_PLUGIN_INFO_GET_PRIVATE(info);
+ priv = gplugin_gtk_plugin_info_get_instance_private(info); - if(GPLUGIN_IS_PLUGIN(priv->plugin))
+ if(GPLUGIN_IS_PLUGIN(priv->plugin)) { g_object_unref(G_OBJECT(priv->plugin));
- if(GPLUGIN_IS_PLUGIN(plugin))
+ if(GPLUGIN_IS_PLUGIN(plugin)) { priv->plugin = GPLUGIN_PLUGIN(g_object_ref(G_OBJECT(plugin)));
_gplugin_gtk_plugin_info_refresh(priv, plugin);
@@ -349,13 +331,12 @@
-gplugin_gtk_plugin_info_get_plugin(const GPluginGtkPluginInfo *info) {
+gplugin_gtk_plugin_info_get_plugin(GPluginGtkPluginInfo *info) { GPluginGtkPluginInfoPrivate *priv = NULL;
g_return_val_if_fail(GPLUGIN_GTK_IS_PLUGIN_INFO(info), NULL);
- priv = GPLUGIN_GTK_PLUGIN_INFO_GET_PRIVATE(info);
+ priv = gplugin_gtk_plugin_info_get_instance_private(info); return (priv->plugin) ? GPLUGIN_PLUGIN(g_object_ref(G_OBJECT(priv->plugin))) : NULL;
--- a/gplugin-gtk/meson.build Mon Oct 01 21:42:52 2018 -0500
+++ b/gplugin-gtk/meson.build Mon Oct 01 23:44:17 2018 -0500
@@ -62,6 +62,15 @@
###############################################################################
+############################################################################### +gplugin_gtk_resources = gnome.compile_resources( + 'gplugin-gtk-resources', + 'data/gplugin-gtk.gresource.xml', +############################################################################### ###############################################################################
gplugin_gtk = shared_library('gplugin-gtk',
@@ -71,6 +80,7 @@
GPLUGIN_GTK_PRIVATE_HEADERS,
GPLUGIN_GTK_PUBLIC_BUILT_SOURCES,
GPLUGIN_GTK_PUBLIC_BUILT_HEADERS,
c_args : ['-DGPLUGIN_GTK_COMPILATION', '-DG_LOG_DOMAIN="GPluginGtk"'],
include_directories : toplevel_inc,
dependencies : [gplugin_dep, GTK3],
@@ -125,12 +135,6 @@
subdir : 'gplugin-1.0/gplugin-gtk'
-# install the GtkBuilder files
- 'gplugin-gtk-plugin-info.ui',
- install_dir : join_paths(get_option('datadir'), 'gplugin', 'gplugin-gtk')
###############################################################################
###############################################################################