[geany/geany] 605ec0: Cleanup Plugin Manager dialog
Colomban Wendling
git-noreply at xxxxx
Fri Apr 25 16:46:14 UTC 2014
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Fri, 25 Apr 2014 16:46:14 UTC
Commit: 605ec0b02ec8f563fc683b76f2b5684018bcfa31
https://github.com/geany/geany/commit/605ec0b02ec8f563fc683b76f2b5684018bcfa31
Log Message:
-----------
Cleanup Plugin Manager dialog
Merge "Name" and "Description" columns, and move plugin details to
tooltips.
Modified Paths:
--------------
src/plugins.c
Modified: src/plugins.c
168 lines changed, 86 insertions(+), 82 deletions(-)
===================================================================
@@ -1191,8 +1191,6 @@ gboolean plugins_have_preferences(void)
enum
{
PLUGIN_COLUMN_CHECK = 0,
- PLUGIN_COLUMN_NAME,
- PLUGIN_COLUMN_DESCRIPTION,
PLUGIN_COLUMN_PLUGIN,
PLUGIN_N_COLUMNS,
PM_BUTTON_KEYBINDINGS,
@@ -1205,9 +1203,6 @@ typedef struct
GtkWidget *dialog;
GtkWidget *tree;
GtkListStore *store;
- GtkWidget *plugin_label;
- GtkWidget *filename_label;
- GtkWidget *author_label;
GtkWidget *configure_button;
GtkWidget *keybindings_button;
GtkWidget *help_button;
@@ -1241,20 +1236,7 @@ static void pm_selection_changed(GtkTreeSelection *selection, gpointer user_data
gtk_tree_model_get(model, &iter, PLUGIN_COLUMN_PLUGIN, &p, -1);
if (p != NULL)
- {
- gchar *text;
- PluginInfo *pi;
-
- pi = &p->info;
- /* Translators: <plugin name> <plugin version> */
- text = g_strdup_printf(_("%s %s"), pi->name, pi->version);
- gtk_label_set_text(GTK_LABEL(pm_widgets.plugin_label), text);
- gtk_label_set_text(GTK_LABEL(pm_widgets.filename_label), p->filename);
- gtk_label_set_text(GTK_LABEL(pm_widgets.author_label), pi->author);
- g_free(text);
-
pm_update_buttons(p);
- }
}
}
@@ -1313,6 +1295,75 @@ static void pm_plugin_toggled(GtkCellRendererToggle *cell, gchar *pth, gpointer
}
+static gboolean pm_treeview_query_tooltip(GtkWidget *widget, gint x, gint y,
+ gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ Plugin *p = NULL;
+
+ if (! gtk_tree_view_get_tooltip_context(GTK_TREE_VIEW(widget), &x, &y, keyboard_mode,
+ &model, &path, &iter))
+ return FALSE;
+
+ gtk_tree_model_get(model, &iter, PLUGIN_COLUMN_PLUGIN, &p, -1);
+ if (p != NULL)
+ {
+ gchar *markup;
+ gchar *details;
+
+ details = g_strdup_printf(_("Version:\t%s\nAuthor(s):\t%s\nFilename:\t%s"),
+ p->info.version, p->info.author, p->filename);
+ markup = g_markup_printf_escaped("<b>%s</b>\n%s\n<small><i>\n%s</i></small>",
+ p->info.name, p->info.description, details);
+
+ gtk_tooltip_set_markup(tooltip, markup);
+ gtk_tree_view_set_tooltip_row(GTK_TREE_VIEW(widget), tooltip, path);
+
+ g_free(details);
+ g_free(markup);
+ }
+ gtk_tree_path_free(path);
+
+ return p != NULL;
+}
+
+
+static void pm_treeview_text_cell_data_func(GtkTreeViewColumn *column, GtkCellRenderer *cell,
+ GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+ Plugin *p;
+
+ gtk_tree_model_get(model, iter, PLUGIN_COLUMN_PLUGIN, &p, -1);
+
+ if (p == NULL)
+ g_object_set(cell, "text", _("No plugins available."), NULL);
+ else
+ {
+ gchar *markup = g_markup_printf_escaped("<b>%s</b>\n%s", p->info.name, p->info.description);
+
+ g_object_set(cell, "markup", markup, NULL);
+ g_free(markup);
+ }
+}
+
+
+static gint pm_tree_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
+ gpointer user_data)
+{
+ Plugin *pa, *pb;
+
+ gtk_tree_model_get(model, a, PLUGIN_COLUMN_PLUGIN, &pa, -1);
+ gtk_tree_model_get(model, b, PLUGIN_COLUMN_PLUGIN, &pb, -1);
+
+ if (pa && pb)
+ return strcmp(pa->info.name, pb->info.name);
+ else
+ return pa - pb;
+}
+
+
static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
{
GtkCellRenderer *text_renderer, *checkbox_renderer;
@@ -1321,6 +1372,9 @@ static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
GList *list;
GtkTreeSelection *sel;
+ g_signal_connect(tree, "query-tooltip", G_CALLBACK(pm_treeview_query_tooltip), NULL);
+ gtk_widget_set_has_tooltip(tree, TRUE);
+
checkbox_renderer = gtk_cell_renderer_toggle_new();
column = gtk_tree_view_column_new_with_attributes(
_("Active"), checkbox_renderer, "active", PLUGIN_COLUMN_CHECK, NULL);
@@ -1328,20 +1382,18 @@ static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
g_signal_connect(checkbox_renderer, "toggled", G_CALLBACK(pm_plugin_toggled), NULL);
text_renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(
- _("Plugin"), text_renderer, "text", PLUGIN_COLUMN_NAME, NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
-
- text_renderer = gtk_cell_renderer_text_new();
g_object_set(text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- column = gtk_tree_view_column_new_with_attributes(
- _("Description"), text_renderer, "text", PLUGIN_COLUMN_DESCRIPTION, NULL);
+ column = gtk_tree_view_column_new_with_attributes(_("Plugin"), text_renderer, NULL);
+ gtk_tree_view_column_set_cell_data_func(column, text_renderer,
+ pm_treeview_text_cell_data_func, NULL, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE);
gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tree), FALSE);
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), PLUGIN_COLUMN_PLUGIN,
+ pm_tree_sort_func, NULL, NULL);
gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(store), PLUGIN_COLUMN_NAME, GTK_SORT_ASCENDING);
+ GTK_TREE_SORTABLE(store), PLUGIN_COLUMN_PLUGIN, GTK_SORT_ASCENDING);
/* selection handling */
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
@@ -1353,8 +1405,7 @@ static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
{
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, PLUGIN_COLUMN_CHECK, FALSE,
- PLUGIN_COLUMN_NAME, _("No plugins available."),
- PLUGIN_COLUMN_DESCRIPTION, "", PLUGIN_COLUMN_PLUGIN, NULL, -1);
+ PLUGIN_COLUMN_PLUGIN, NULL, -1);
}
else
{
@@ -1366,8 +1417,6 @@ static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
PLUGIN_COLUMN_CHECK, is_active_plugin(p),
- PLUGIN_COLUMN_NAME, p->info.name,
- PLUGIN_COLUMN_DESCRIPTION, p->info.description,
PLUGIN_COLUMN_PLUGIN, p,
-1);
}
@@ -1432,25 +1481,9 @@ static void pm_dialog_response(GtkDialog *dialog, gint response, gpointer user_d
}
-static GtkWidget *create_table_label(const gchar *text)
-{
- GtkWidget *label;
- PangoAttrList *attrs;
-
- attrs = pango_attr_list_new();
- pango_attr_list_insert(attrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD));
- label = gtk_label_new(text);
- gtk_label_set_attributes(GTK_LABEL(label), attrs);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
- pango_attr_list_unref(attrs);
-
- return label;
-}
-
-
static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data)
{
- GtkWidget *vbox, *vbox2, *label_vbox, *hbox, *swin, *label, *label2, *desc_win, *table, *paned;
+ GtkWidget *vbox, *vbox2, *hbox, *swin, *label;
/* before showing the dialog, we need to create the list of available plugins */
load_all_plugins();
@@ -1466,7 +1499,7 @@ static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data)
pm_widgets.tree = gtk_tree_view_new();
pm_widgets.store = gtk_list_store_new(
- PLUGIN_N_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+ PLUGIN_N_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_POINTER);
pm_prepare_treeview(pm_widgets.tree, pm_widgets.store);
swin = gtk_scrolled_window_new(NULL, NULL);
@@ -1492,45 +1525,16 @@ static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data)
g_signal_connect(pm_widgets.help_button, "clicked",
G_CALLBACK(pm_on_plugin_button_clicked), GINT_TO_POINTER(PM_BUTTON_HELP));
- label2 = gtk_label_new(_("<b>Plugin details:</b>"));
- gtk_label_set_use_markup(GTK_LABEL(label2), TRUE);
- gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
-
- table = gtk_table_new(3, 2, FALSE);
- gtk_table_set_col_spacings(GTK_TABLE(table), 6);
- pm_widgets.plugin_label = geany_wrap_label_new(NULL);
- pm_widgets.filename_label = geany_wrap_label_new(NULL);
- pm_widgets.author_label = geany_wrap_label_new(NULL);
- gtk_table_attach(GTK_TABLE(table), create_table_label(_("Plugin:")), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
- gtk_table_attach(GTK_TABLE(table), create_table_label(_("Author(s):")), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
- gtk_table_attach(GTK_TABLE(table), create_table_label(_("Filename:")), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
- gtk_table_attach(GTK_TABLE(table), pm_widgets.plugin_label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
- gtk_table_attach(GTK_TABLE(table), pm_widgets.author_label, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
- gtk_table_attach(GTK_TABLE(table), pm_widgets.filename_label, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-
- desc_win = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(desc_win),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(desc_win), table);
-
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_set_spacing(GTK_BOX(hbox), 6);
- gtk_box_pack_start(GTK_BOX(hbox), label2, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), pm_widgets.help_button, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), pm_widgets.configure_button, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), pm_widgets.keybindings_button, FALSE, FALSE, 0);
-
- label_vbox = gtk_vbox_new(FALSE, 3);
- gtk_box_pack_start(GTK_BOX(label_vbox), hbox, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(label_vbox), desc_win, TRUE, TRUE, 0);
-
- paned = gtk_vpaned_new();
- gtk_paned_pack1(GTK_PANED(paned), swin, TRUE, FALSE);
- gtk_paned_pack2(GTK_PANED(paned), label_vbox, FALSE, FALSE);
+ gtk_box_pack_end(GTK_BOX(hbox), pm_widgets.keybindings_button, FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(hbox), pm_widgets.configure_button, FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(hbox), pm_widgets.help_button, FALSE, FALSE, 0);
vbox2 = gtk_vbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 5);
- gtk_box_pack_start(GTK_BOX(vbox2), paned, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox2), swin, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, TRUE, 0);
g_signal_connect(pm_widgets.dialog, "response", G_CALLBACK(pm_dialog_response), NULL);
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list