[geany/geany] 0f1793: Add a popup menu to the plugin list in the plugin manager dialog

Enrico Tröger git-noreply at xxxxx
Fri Jun 5 16:46:00 UTC 2015


Branch:      refs/heads/master
Author:      Enrico Tröger <enrico.troeger at uvena.de>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Mon, 23 Mar 2015 14:16:44 UTC
Commit:      0f179331ef0760af7c5e7a61dbb9f70ba8c8e43f
             https://github.com/geany/geany/commit/0f179331ef0760af7c5e7a61dbb9f70ba8c8e43f

Log Message:
-----------
Add a popup menu to the plugin list in the plugin manager dialog

This makes it easier to reach plugins' configure, keybindings and help
functions.


Modified Paths:
--------------
    src/plugins.c

Modified: src/plugins.c
62 lines changed, 56 insertions(+), 6 deletions(-)
===================================================================
@@ -1212,6 +1212,10 @@ typedef struct
 	GtkWidget *configure_button;
 	GtkWidget *keybindings_button;
 	GtkWidget *help_button;
+	GtkWidget *popup_menu;
+	GtkWidget *popup_configure_menu_item;
+	GtkWidget *popup_keybindings_menu_item;
+	GtkWidget *popup_help_menu_item;
 }
 PluginManagerWidgets;
 
@@ -1221,13 +1225,22 @@ static PluginManagerWidgets pm_widgets;
 static void pm_update_buttons(Plugin *p)
 {
 	gboolean is_active;
+	gboolean has_configure;
+	gboolean has_help;
+	gboolean has_keybindings;
 
 	is_active = is_active_plugin(p);
-	gtk_widget_set_sensitive(pm_widgets.configure_button,
-		(p->configure || p->configure_single) && is_active);
-	gtk_widget_set_sensitive(pm_widgets.help_button, p->help != NULL && is_active);
-	gtk_widget_set_sensitive(pm_widgets.keybindings_button,
-		p->key_group && p->key_group->plugin_key_count > 0 && is_active);
+	has_configure = (p->configure || p->configure_single) && is_active;
+	has_help = p->help != NULL && is_active;
+	has_keybindings = p->key_group && p->key_group->plugin_key_count > 0 && is_active;
+
+	gtk_widget_set_sensitive(pm_widgets.configure_button, has_configure);
+	gtk_widget_set_sensitive(pm_widgets.help_button, has_help);
+	gtk_widget_set_sensitive(pm_widgets.keybindings_button, has_keybindings);
+
+	gtk_widget_set_sensitive(pm_widgets.popup_configure_menu_item, has_configure);
+	gtk_widget_set_sensitive(pm_widgets.popup_help_menu_item, has_help);
+	gtk_widget_set_sensitive(pm_widgets.popup_keybindings_menu_item, has_keybindings);
 }
 
 
@@ -1355,6 +1368,18 @@ static void pm_treeview_text_cell_data_func(GtkTreeViewColumn *column, GtkCellRe
 }
 
 
+static gboolean pm_treeview_button_press_cb(GtkWidget *widget, GdkEventButton *event,
+		G_GNUC_UNUSED gpointer user_data)
+{
+	if (event->button == 3)
+	{
+		gtk_menu_popup(GTK_MENU(pm_widgets.popup_menu), NULL, NULL, NULL, NULL,
+				event->button, event->time);
+	}
+	return FALSE;
+}
+
+
 static gint pm_tree_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
 		gpointer user_data)
 {
@@ -1407,6 +1432,8 @@ static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
 	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
 	g_signal_connect(sel, "changed", G_CALLBACK(pm_selection_changed), NULL);
 
+	g_signal_connect(tree, "button-press-event", G_CALLBACK(pm_treeview_button_press_cb), NULL);
+
 	list = g_list_first(plugin_list);
 	if (list == NULL)
 	{
@@ -1490,7 +1517,7 @@ static void pm_dialog_response(GtkDialog *dialog, gint response, gpointer user_d
 
 static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data)
 {
-	GtkWidget *vbox, *vbox2, *hbox, *swin, *label;
+	GtkWidget *vbox, *vbox2, *hbox, *swin, *label, *menu_item;
 
 	/* before showing the dialog, we need to create the list of available plugins */
 	load_all_plugins();
@@ -1532,6 +1559,28 @@ 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));
 
+	/* plugin popup menu */
+	pm_widgets.popup_menu = gtk_menu_new();
+
+	menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
+	gtk_container_add(GTK_CONTAINER(pm_widgets.popup_menu), menu_item);
+	g_signal_connect(menu_item, "activate",
+			G_CALLBACK(pm_on_plugin_button_clicked), GINT_TO_POINTER(PM_BUTTON_CONFIGURE));
+	pm_widgets.popup_configure_menu_item = menu_item;
+
+	menu_item = gtk_image_menu_item_new_with_mnemonic(_("Keybindings"));
+	gtk_container_add(GTK_CONTAINER(pm_widgets.popup_menu), menu_item);
+	g_signal_connect(menu_item, "activate",
+			G_CALLBACK(pm_on_plugin_button_clicked), GINT_TO_POINTER(PM_BUTTON_KEYBINDINGS));
+	pm_widgets.popup_keybindings_menu_item = menu_item;
+
+	menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, NULL);
+	gtk_container_add(GTK_CONTAINER(pm_widgets.popup_menu), menu_item);
+	g_signal_connect(menu_item, "activate",
+			G_CALLBACK(pm_on_plugin_button_clicked), GINT_TO_POINTER(PM_BUTTON_HELP));
+	pm_widgets.popup_help_menu_item = menu_item;
+
+
 	hbox = gtk_hbox_new(FALSE, 0);
 	gtk_box_set_spacing(GTK_BOX(hbox), 6);
 	gtk_box_pack_end(GTK_BOX(hbox), pm_widgets.keybindings_button, FALSE, FALSE, 0);
@@ -1547,6 +1596,7 @@ static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data)
 
 	gtk_box_pack_start(GTK_BOX(vbox), vbox2, TRUE, TRUE, 0);
 	gtk_widget_show_all(pm_widgets.dialog);
+	gtk_widget_show_all(pm_widgets.popup_menu);
 }
 
 



--------------
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