Index: configure.in =================================================================== --- configure.in (revision 1852) +++ configure.in (working copy) @@ -238,16 +238,17 @@ Tomboy/Addins/Bugzilla/Makefile Tomboy/Addins/ExportToHtml/Makefile Tomboy/Addins/Evolution/Makefile +Tomboy/Addins/FileSystemSyncService/Makefile Tomboy/Addins/FixedWidth/Makefile Tomboy/Addins/GalagoPresence/Makefile -Tomboy/Addins/Sketching/Makefile Tomboy/Addins/InsertTimestamp/Makefile Tomboy/Addins/NoteOfTheDay/Makefile Tomboy/Addins/PrintNotes/Makefile +Tomboy/Addins/Sketching/Makefile +Tomboy/Addins/SshSyncService/Makefile Tomboy/Addins/StickyNoteImport/Makefile -Tomboy/Addins/FileSystemSyncService/Makefile +Tomboy/Addins/Tasky/Makefile Tomboy/Addins/WebDavSyncService/Makefile -Tomboy/Addins/SshSyncService/Makefile test/Makefile po/Makefile.in ]) Index: Tomboy.mdp =================================================================== --- Tomboy.mdp (revision 1852) +++ Tomboy.mdp (working copy) @@ -222,6 +222,7 @@ + Index: Tomboy/Addins/Tasky/TaskyNoteAddin.cs =================================================================== --- Tomboy/Addins/Tasky/TaskyNoteAddin.cs (revision 0) +++ Tomboy/Addins/Tasky/TaskyNoteAddin.cs (revision 0) @@ -0,0 +1,147 @@ + +using System; +using System.Collections; + +using Mono.Unix; + +using Tomboy; + +using NDesk.DBus; +using org.freedesktop.DBus; + +namespace Tomboy.TaskyAddin +{ + public class TaskyNoteAddin : NoteAddin + { + static ObjectPath TaskyPath = + new ObjectPath ("/org/gnome/Tasky/RemoteControl"); + static string TaskyNamespace = "org.gnome.Tasky"; + + private org.freedesktop.DBus.IBus sessionBus; + + Gtk.ImageMenuItem menu_item; + Gtk.Menu menu; + bool submenu_built; + + public override void Initialize () + { + submenu_built = false; + + menu = new Gtk.Menu (); + menu.Hidden += OnMenuHidden; + menu.ShowAll (); + menu_item = new Gtk.ImageMenuItem ( + Catalog.GetString ("Create task in ...")); + menu_item.Image = new Gtk.Image (Gtk.Stock.Add, Gtk.IconSize.Menu); + menu_item.Submenu = menu; + menu_item.Activated += OnMenuItemActivated; + menu_item.Show (); + AddPluginMenuItem (menu_item); + } + + public override void Shutdown () + { + // The following two lines are required to prevent the plugin + // from leaking references when the plugin is disabled. + menu.Hidden -= OnMenuHidden; + menu_item.Activated -= OnMenuItemActivated; + } + + public override void OnNoteOpened () + { + } + + void OnMenuItemActivated (object sender, EventArgs args) + { + if (submenu_built == true) + return; // submenu already built. do nothing. + + UpdateMenu (); + } + + void OnMenuHidden (object sender, EventArgs args) + { + // FIXME: Figure out how to have this function be called only when + // the whole Tools menu is collapsed so that if a user keeps + // toggling over the "What links here?" menu item, it doesn't + // keep forcing the submenu to rebuild. + + // Force the submenu to rebuild next time it's supposed to show + submenu_built = false; + } + + void UpdateMenu () + { + // + // Clear out the old list + // + foreach (Gtk.MenuItem old_item in menu.Children) { + menu.Remove (old_item); + } + + Tasky.RemoteControl tasky = GetTaskyRemoteControl (); + + string [] taskCategories = null; + + try { + taskCategories = tasky.GetCategoryNames (); + } catch (Exception e) { + Logger.Debug ("Exception calling Tasky.GetCategoryNames (): {0}", + e.Message); + } + + // + // Build a new list + // + foreach (string category in taskCategories) { + Gtk.MenuItem item = new Gtk.MenuItem (category); + item.Activated += OnCategoryActivated; + item.ShowAll (); + menu.Append (item); + } + + // If nothing was found, add in a "dummy" item + if (menu.Children.Length == 0) { + Gtk.MenuItem blankItem = + new Gtk.MenuItem (Catalog.GetString ("--- Tasky is not running ---")); + blankItem.Sensitive = false; + blankItem.ShowAll (); + menu.Append (blankItem); + } + + submenu_built = true; + } + + void OnCategoryActivated (object sender, EventArgs args) + { + string categoryName = sender as string; + if (categoryName == null) + return; + + Tasky.RemoteControl tasky = GetTaskyRemoteControl (); + if (tasky == null) + return; + + string taskName = GetTaskName (); + + try { + tasky.CreateTask (categoryName, taskName, true); + } catch (Exception e) { + Logger.Debug ("Exception calling Tasky.CreateTask ()", e.Message); + } + } + + Tasky.RemoteControl GetTaskyRemoteControl () + { + return Bus.Session.GetObject ( + TaskyNamespace, + TaskyPath); + } + + string GetTaskName () + { + // TODO: Get the current line of text that the cursor is on and pass that in as the task name + return "Create a task remotely from Tomboy"; + } + } +} Index: Tomboy/Addins/Tasky/Tasky.addin.xml =================================================================== --- Tomboy/Addins/Tasky/Tasky.addin.xml (revision 0) +++ Tomboy/Addins/Tasky/Tasky.addin.xml (revision 0) @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + Index: Tomboy/Addins/Tasky/Makefile.am =================================================================== --- Tomboy/Addins/Tasky/Makefile.am (revision 0) +++ Tomboy/Addins/Tasky/Makefile.am (revision 0) @@ -0,0 +1,38 @@ +include $(top_srcdir)/Makefile.include + +CSFLAGS = \ + -debug \ + -define:DEBUG \ + -target:library + +ASSEMBLIES = \ + $(LINK_TOMBOY_EXE) \ + $(TOMBOY_LIBS) \ + $(LINK_MONO_ADDINS) \ + $(DBUS_LIBS) \ + -r:Mono.Posix \ + -r:/home/boyd/stage/tasky/lib/tasky/Tasky.exe + +ADDIN_NAME = Tasky +TARGET = $(ADDIN_NAME).dll +CSFILES = \ + $(srcdir)/TaskyNoteAddin.cs +RESOURCES = \ + -resource:$(srcdir)/$(ADDIN_NAME).addin.xml + +$(TARGET): $(CSFILES) $(top_builddir)/Tomboy/Tomboy.exe + $(CSC) -out:$@ $(CSFLAGS) $(ASSEMBLIES) $(CSFILES) $(RESOURCES) + + +addinsdir = $(pkglibdir)/addins +addins_DATA = \ + $(TARGET) + +EXTRA_DIST = \ + $(CSFILES) \ + $(srcdir)/$(ADDIN_NAME).addin.xml + +CLEANFILES = \ + $(TARGET).mdb \ + $(TARGET) + Index: Tomboy/Addins/Makefile.am =================================================================== --- Tomboy/Addins/Makefile.am (revision 1852) +++ Tomboy/Addins/Makefile.am (working copy) @@ -3,14 +3,15 @@ Bugzilla \ ExportToHtml \ Evolution \ + FileSystemSyncService \ FixedWidth \ GalagoPresence \ - Sketching \ InsertTimestamp \ NoteOfTheDay \ PrintNotes \ + Sketching \ + SshSyncService \ StickyNoteImport \ - FileSystemSyncService \ - WebDavSyncService \ - SshSyncService + Tasky \ + WebDavSyncService