gplugin/gplugin

8ede7e70f486
Parents 923e2711aab5
Children 8b1e389d4535
Update GPluginGtkPluginInfo to be based on a GtkBuilder template
--- a/.hgignore Mon Oct 01 21:42:52 2018 -0500
+++ b/.hgignore Mon Oct 01 23:44:17 2018 -0500
@@ -1,9 +1,10 @@
syntax: glob
.*.swp
-*.cookies
*.debhelper
*.orig
*.pyc
+*.ui~
+\#*.ui\#
syntax: regexp
^artifacts\/
@@ -16,4 +17,3 @@
^packaging\/debian\/files$
^obj-x86_64-linux-gnu\/
^debian\/?$
-.+\.sublime-workspace
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gplugin-gtk/data/gplugin-gtk.gresource.xml Mon Oct 01 23:44:17 2018 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/bitbucket/gplugin/gplugin-gtk/">
+ <file compressed="true">plugin-info.ui</file>
+ </gresource>
+</gresources>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gplugin-gtk/data/plugin-info.ui Mon Oct 01 23:44:17 2018 -0500
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="GPluginGtkPluginInfo" parent="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="2"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="version_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Version</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="version">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="authors_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Authors</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="authors_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="website_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Website</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="website">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_markup">True</property>
+ <property name="track_visited_links">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="summary_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Summary</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="summary">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="description_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Description</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="description">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="dependencies_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Dependencies</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dependencies">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkExpander">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label_fill">True</property>
+ <signal name="activate" handler="gplugin_gtk_plugin_info_expander_activate" object="GPluginGtkPluginInfo" swapped="no"/>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="id_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">ID</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="id">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="filename_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Filename</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="filename">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="abi_version_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">ABI Version</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="abi_version">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="loader_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Loader</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="loader">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="internal_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Internal</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="internal">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="load_on_query_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Load on Query</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="load_on_query">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="expander">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">More</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ </template>
+ <object class="GtkSizeGroup" id="size_group">
+ <widgets>
+ <widget name="version_label"/>
+ <widget name="authors_label"/>
+ <widget name="website_label"/>
+ <widget name="summary_label"/>
+ <widget name="description_label"/>
+ <widget name="dependencies_label"/>
+ <widget name="id_label"/>
+ <widget name="filename_label"/>
+ <widget name="abi_version_label"/>
+ <widget name="loader_label"/>
+ <widget name="internal_label"/>
+ <widget name="load_on_query_label"/>
+ </widgets>
+ </object>
+</interface>
--- 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))
-
/******************************************************************************
* Structs
*****************************************************************************/
typedef struct {
GPluginPlugin *plugin;
- GtkBuilder *builder;
+
+ GtkWidget *name;
+ GtkWidget *version;
+ GtkWidget *authors_box;
+ GtkWidget *website;
+ GtkWidget *summary;
+ GtkWidget *description;
+ GtkWidget *dependencies;
+ GtkWidget *expander;
+ GtkWidget *id;
+ GtkWidget *filename;
+ GtkWidget *abi_version;
+ GtkWidget *loader;
+ GtkWidget *internal;
+ GtkWidget *load_on_query;
} GPluginGtkPluginInfoPrivate;
/*****************************************************************************s
@@ -47,13 +57,16 @@
PROP_PLUGIN,
N_PROPERTIES,
};
+static GParamSpec *properties[N_PROPERTIES] = {NULL,};
+
+G_DEFINE_TYPE_WITH_PRIVATE(GPluginGtkPluginInfo, gplugin_gtk_plugin_info, GTK_TYPE_BOX);
/******************************************************************************
* Callbacks
*****************************************************************************/
static void
-_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,
GPluginPlugin *plugin)
{
- GtkWidget *authors_grid = NULL, *widget = NULL;
+ GtkWidget *widget = NULL;
GList *children = NULL, *iter = NULL;
gchar *markup = 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;
gchar *loader = NULL;
gchar **authors = NULL;
guint32 abi_version_uint;
gboolean loq = FALSE, internal = FALSE;
const gchar *filename = NULL;
- authors_grid = GTK_WIDGET(gtk_builder_get_object(priv->builder,
- "authors_grid"));
-
- /* 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));
g_list_free(children);
@@ -104,6 +114,7 @@
g_object_get(G_OBJECT(plugin_info),
"abi_version", &abi_version_uint,
"authors", &authors,
+ "summary", &summary,
"description", &description,
"id", &id,
"internal", &internal,
@@ -134,13 +145,24 @@
g_object_unref(G_OBJECT(plugin_info));
}
- /* set the name */
- 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");
- /* set the version */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "version"));
- gtk_label_set_text(GTK_LABEL(widget), (version) ? version : "");
+ g_free(description);
+ g_free(id);
+ g_free(name);
+ g_free(version);
+ g_free(website);
+ g_free(loader);
/* set the authors */
if(authors) {
@@ -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);
gtk_widget_show(widget);
}
}
-
- /* set the website */
- 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 : "");
-
- /* set the filename */
- 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 : "");
-
- /* set the loader */
- widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "loader"));
- gtk_label_set_text(GTK_LABEL(widget), (loader) ? loader : "Unknown");
-
- /* set the internal */
- 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,
- "load_on_query"));
- gtk_label_set_text(GTK_LABEL(widget), (loq) ? "Yes" : "No");
-
- /* cleanup */
g_strfreev(authors);
- g_free(description);
- g_free(id);
- g_free(name);
- g_free(version);
- g_free(website);
- g_free(loader);
}
/******************************************************************************
* GObject Stuff
*****************************************************************************/
-G_DEFINE_TYPE(GPluginGtkPluginInfo, gplugin_gtk_plugin_info, GTK_TYPE_FRAME);
-
static void
gplugin_gtk_plugin_info_set_property(GObject *obj, guint prop_id,
const GValue *value, GParamSpec *pspec)
@@ -237,53 +216,60 @@
}
static void
-gplugin_gtk_plugin_info_constructed(GObject *obj) {
- GPluginGtkPluginInfoPrivate *priv = NULL;
- GtkWidget *widget = NULL;
- GError *error = 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);
- if(error) {
- g_warning("%s", error->message);
- g_error_free(error);
+ if(priv->plugin != NULL) {
+ g_object_unref(priv->plugin);
}
- g_free(filename);
- 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,
- "more_expander"));
- g_signal_connect(G_OBJECT(widget), "activate",
- G_CALLBACK(_gplugin_gtk_plugin_info_expander_activate_cb),
- NULL);
+ G_OBJECT_CLASS(gplugin_gtk_plugin_info_parent_class)->finalize(obj);
}
static void
-gplugin_gtk_plugin_info_init(GPLUGIN_UNUSED GPluginGtkPluginInfo *info) {
+gplugin_gtk_plugin_info_init(GPluginGtkPluginInfo *info) {
+ gtk_widget_init_template(GTK_WIDGET(info));
}
static void
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 */
+ properties[PROP_PLUGIN] = g_param_spec_object(
+ "plugin", "plugin",
+ "The GPluginPlugin who's info should be displayed",
+ GPLUGIN_TYPE_PLUGIN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT
+ );
+
+ /* template stuff */
+ gtk_widget_class_set_template_from_resource(
+ widget_class,
+ "/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 @@
*/
GtkWidget *
gplugin_gtk_plugin_info_new(void) {
- GObject *ret = NULL;
-
- ret = g_object_new(GPLUGIN_GTK_TYPE_PLUGIN_INFO,
- "shadow-type", GTK_SHADOW_NONE,
- NULL);
-
- 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)));
- else
+ } else {
priv->plugin = NULL;
+ }
_gplugin_gtk_plugin_info_refresh(priv, plugin);
}
@@ -349,13 +331,12 @@
* displayed.
*/
GPluginPlugin *
-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/gplugin-gtk-plugin-info.h Mon Oct 01 21:42:52 2018 -0500
+++ b/gplugin-gtk/gplugin-gtk-plugin-info.h Mon Oct 01 23:44:17 2018 -0500
@@ -61,7 +61,7 @@
GtkWidget *gplugin_gtk_plugin_info_new(void);
void gplugin_gtk_plugin_info_set_plugin(GPluginGtkPluginInfo *info, GPluginPlugin *plugin);
-GPluginPlugin *gplugin_gtk_plugin_info_get_plugin(const GPluginGtkPluginInfo *info);
+GPluginPlugin *gplugin_gtk_plugin_info_get_plugin(GPluginGtkPluginInfo *info);
G_END_DECLS
--- a/gplugin-gtk/gplugin-gtk-plugin-info.ui Mon Oct 01 21:42:52 2018 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,397 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <!-- interface-requires gtk+ 3.0 -->
- <object class="GtkGrid" id="plugin_info">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkLabel" id="name">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">2</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="version_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Version</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="authors_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Authors </property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="version">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkGrid" id="authors_grid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="website_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Website</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="website">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="use_markup">True</property>
- <property name="track_visited_links">False</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="description_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Description</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="description">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkExpander" id="more_expander">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkGrid" id="more_grid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkLabel" id="id_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Plugin ID</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="id">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="filename_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Filename</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="filename">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="abi_version_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">ABI Version</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="abi_version">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="loader_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Loader</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="loader">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="load_on_query_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Load on Query</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="load_on_query">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="internal_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Internal</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="internal">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">4</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="expander_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">More</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">6</property>
- <property name="width">2</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="dependencies_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Dependencies </property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="dependencies">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">5</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- <object class="GtkSizeGroup" id="plugin_info_sizegroup">
- <widgets>
- <widget name="version_label"/>
- <widget name="authors_label"/>
- <widget name="website_label"/>
- <widget name="description_label"/>
- <widget name="id_label"/>
- <widget name="filename_label"/>
- <widget name="abi_version_label"/>
- <widget name="loader_label"/>
- <widget name="load_on_query_label"/>
- <widget name="internal_label"/>
- <widget name="dependencies_label"/>
- </widgets>
- </object>
-</interface>
--- 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 @@
)
###############################################################################
+# Resource Target
+###############################################################################
+gplugin_gtk_resources = gnome.compile_resources(
+ 'gplugin-gtk-resources',
+ 'data/gplugin-gtk.gresource.xml',
+ c_name: 'gplugin_gtk',
+ source_dir: 'data')
+
+###############################################################################
# Library Target
###############################################################################
gplugin_gtk = shared_library('gplugin-gtk',
@@ -71,6 +80,7 @@
GPLUGIN_GTK_PRIVATE_HEADERS,
GPLUGIN_GTK_PUBLIC_BUILT_SOURCES,
GPLUGIN_GTK_PUBLIC_BUILT_HEADERS,
+ gplugin_gtk_resources,
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
-install_data(
- 'gplugin-gtk-plugin-info.ui',
- install_dir : join_paths(get_option('datadir'), 'gplugin', 'gplugin-gtk')
-)
-
###############################################################################
# subdirectories
###############################################################################