SF.net SVN: geany-plugins:[1100] trunk/geany-plugins/addons

eht16 at users.sourceforge.net eht16 at xxxxx
Fri Jan 1 22:27:24 UTC 2010


Revision: 1100
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1100&view=rev
Author:   eht16
Date:     2010-01-01 22:27:24 +0000 (Fri, 01 Jan 2010)

Log Message:
-----------
Implement a Delete menu item for the tasks list popup menu to easily delete tasks (closes #2911105).

Modified Paths:
--------------
    trunk/geany-plugins/addons/ChangeLog
    trunk/geany-plugins/addons/src/ao_tasks.c

Modified: trunk/geany-plugins/addons/ChangeLog
===================================================================
--- trunk/geany-plugins/addons/ChangeLog	2010-01-01 22:26:15 UTC (rev 1099)
+++ trunk/geany-plugins/addons/ChangeLog	2010-01-01 22:27:24 UTC (rev 1100)
@@ -4,6 +4,9 @@
    Update copyright information.
  * src/ao_bookmarklist.c:
    Fix warning if the bookmark list is disabled.
+ * src/ao_tasks.c:
+   Implement a Delete menu item for the tasks list popup menu to easily
+   delete tasks (closes #2911105).
 
 
 2009-12-08  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/geany-plugins/addons/src/ao_tasks.c
===================================================================
--- trunk/geany-plugins/addons/src/ao_tasks.c	2010-01-01 22:26:15 UTC (rev 1099)
+++ trunk/geany-plugins/addons/src/ao_tasks.c	2010-01-01 22:27:24 UTC (rev 1100)
@@ -57,6 +57,7 @@
 
 	GtkWidget *page;
 	GtkWidget *popup_menu;
+	GtkWidget *popup_menu_delete_button;
 
 	gchar **tokens;
 };
@@ -201,6 +202,10 @@
 	else if (event->button == 3)
 	{
 		AoTasksPrivate *priv = AO_TASKS_GET_PRIVATE(data);
+		gboolean has_selection = gtk_tree_selection_get_selected(
+			gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree)), NULL, NULL);
+		gtk_widget_set_sensitive(priv->popup_menu_delete_button, has_selection);
+
 		gtk_menu_popup(GTK_MENU(priv->popup_menu), NULL, NULL, NULL, NULL,
 				event->button, event->time);
 		/* don't return TRUE here, otherwise the selection won't be changed */
@@ -249,6 +254,47 @@
 }
 
 
+static void popup_delete_item_click_cb(GtkWidget *button, AoTasks *t)
+{
+	AoTasksPrivate *priv = AO_TASKS_GET_PRIVATE(t);
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree));
+	gchar *filename;
+	gint line, start, end;
+	GeanyDocument *doc;
+
+	if (! gtk_tree_selection_get_selected(selection, &model, &iter))
+		return;
+
+	/* get task information */
+	gtk_tree_model_get(model, &iter,
+		TLIST_COL_FILENAME, &filename,
+		TLIST_COL_LINE, &line,
+		-1);
+
+	/* find the document of this task item */
+	doc = document_find_by_filename(filename);
+	g_free(filename);
+
+	if (doc == NULL)
+		return;
+
+	line--; /* display line vs. document line */
+
+	start = sci_get_position_from_line(doc->editor->sci, line);
+	end = sci_get_position_from_line(doc->editor->sci, line + 1);
+	if (end == -1)
+		end = sci_get_length(doc->editor->sci);
+
+	/* create a selection over this line and then delete it */
+	scintilla_send_message(doc->editor->sci, SCI_SETSEL, start, end);
+	scintilla_send_message(doc->editor->sci, SCI_CLEAR, 0, 0);
+	/* update the task list */
+	ao_tasks_update(t, doc);
+}
+
+
 static void popup_update_item_click_cb(GtkWidget *button, AoTasks *t)
 {
 	ao_tasks_update(t, NULL);
@@ -264,9 +310,20 @@
 static GtkWidget *create_popup_menu(AoTasks *t)
 {
 	GtkWidget *item, *menu;
+	AoTasksPrivate *priv = AO_TASKS_GET_PRIVATE(t);
 
 	menu = gtk_menu_new();
 
+	item = gtk_image_menu_item_new_from_stock(GTK_STOCK_DELETE, NULL);
+	priv->popup_menu_delete_button = item;
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+	g_signal_connect(item, "activate", G_CALLBACK(popup_delete_item_click_cb), t);
+
+	item = gtk_separator_menu_item_new();
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+
 	item = ui_image_menu_item_new(GTK_STOCK_REFRESH, _("_Update"));
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(menu), item);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list