[gnome-boxes] Start GNOME Shell search provider



commit cc5dff056bead1933276fae0fc83f859d60789e5
Author: Marc-Andrà Lureau <marcandre lureau gmail com>
Date:   Sat Aug 4 01:20:14 2012 +0200

    Start GNOME Shell search provider
    
    Add gnome-boxes-search-provider skeleton.
    
    With this basic form, it can already be seen by GNOME Shell, but will
    return no result atm.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=681246

 configure.ac                                   |    8 +++
 data/Makefile.am                               |   19 ++++++
 data/gnome-boxes-search-provider.ini.in        |    6 ++
 data/org.gnome.Boxes.SearchProvider.service.in |    3 +
 po/POTFILES.in                                 |    1 +
 src/Makefile.am                                |   11 ++++
 src/gnome-boxes-search-provider.vala           |   75 ++++++++++++++++++++++++
 7 files changed, 123 insertions(+), 0 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 233653d..d1bab6e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -73,6 +73,14 @@ PKG_CHECK_MODULES(BOXES, [
 ])
 
 VALA_ADD_CHECKFILE([src/gnome_boxes_vala.stamp])
+
+PKG_CHECK_MODULES(BOXES_SEARCH, [
+  glib-2.0 >= $GLIB_MIN_VERSION
+  gio-2.0 >= $GLIB_MIN_VERSION
+])
+
+VALA_ADD_CHECKFILE([src/gnome_boxes_search_provider_vala.stamp])
+
 VALA_ADD_CHECKFILE([libgd/gd-1.0.vapi])
 
 VALA_CHECK([0.16.0], [
diff --git a/data/Makefile.am b/data/Makefile.am
index 7bf83c0..1ad1f4a 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -18,6 +18,14 @@ source_DATA       = QEMU_Session
 
 iconsdir = $(pkgdatadir)/icons
 
+searchproviderdir = $(datadir)/gnome-shell/search-providers
+searchprovider_DATA = gnome-boxes-search-provider.ini
+
+service_in_files = org.gnome.Boxes.SearchProvider.service.in
+
+servicedir = $(datadir)/dbus-1/services
+service_DATA = $(service_in_files:.service.in=.service)
+
 unattendeddir = $(datadir)/gnome-boxes/unattended
 unattended_DATA = fedora.ks			\
 		  win7.xml 			\
@@ -40,6 +48,8 @@ EXTRA_DIST =					\
 	$(source_DATA)				\
 	$(style_DATA)				\
 	$(unattended_DATA)			\
+	$(searchprovider_DATA)			\
+	$(service_in_files)			\
 	$(NULL)
 
 CLEANFILES =					\
@@ -52,7 +62,16 @@ DISTCLEANFILES =				\
 	$(NULL)
 
 MAINTAINERCLEANFILES =				\
+	gnome-boxes-search-provider.ini		\
+	org.gnome.Boxes.SearchProvider.service  \
 	org.gnome.boxes.gschema.valid		\
 	$(NULL)
 
+gnome-boxes-search-provider.ini: gnome-boxes-search-provider.ini.in
+	LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+
+org.gnome.Boxes.SearchProvider.service: org.gnome.Boxes.SearchProvider.service.in Makefile
+	$(AM_V_GEN) [ -d $(@D) ] || $(mkdir_p) $(@D) ; \
+	            sed -e "s|\ libexecdir\@|$(libexecdir)|" $< > $  tmp && mv $  tmp $@
+
 -include $(top_srcdir)/git.mk
diff --git a/data/gnome-boxes-search-provider.ini.in b/data/gnome-boxes-search-provider.ini.in
new file mode 100644
index 0000000..607cf47
--- /dev/null
+++ b/data/gnome-boxes-search-provider.ini.in
@@ -0,0 +1,6 @@
+[Shell Search Provider]
+_Title=Boxes
+Icon=gnome-remote-desktop
+DesktopId=gnome-boxes.desktop
+BusName=org.gnome.Boxes.SearchProvider
+ObjectPath=/org/gnome/Boxes/SearchProvider
diff --git a/data/org.gnome.Boxes.SearchProvider.service.in b/data/org.gnome.Boxes.SearchProvider.service.in
new file mode 100644
index 0000000..5ea598a
--- /dev/null
+++ b/data/org.gnome.Boxes.SearchProvider.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.gnome.Boxes.SearchProvider
+Exec= libexecdir@/gnome-boxes-search-provider
\ No newline at end of file
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ba56a77..678fb8f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,3 +1,4 @@
+data/gnome-boxes-search-provider.ini.in
 data/gnome-boxes.desktop.in.in
 data/org.gnome.boxes.gschema.xml.in
 src/app.vala
diff --git a/src/Makefile.am b/src/Makefile.am
index 3eee03d..ef10c80 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -82,6 +82,17 @@ gnome_boxes_CFLAGS = $(BOXES_CFLAGS)
 
 MAINTAINERCLEANFILES += $(gnome_boxes_SOURCES:.vala=.c)
 
+libexec_PROGRAMS = gnome-boxes-search-provider
+
+gnome_boxes_search_provider_SOURCES =		\
+	gnome-boxes-search-provider.vala	\
+	$(NULL)
+
+gnome_boxes_search_provider_LDADD = $(BOXES_SEARCH_LIBS)
+gnome_boxes_search_provider_CFLAGS = $(BOXES_SEARCH_CFLAGS)
+
+MAINTAINERCLEANFILES += $(gnome_boxes_search_provider_SOURCES:.vala=.c)
+
 EXTRA_DIST = config.vapi
 
 -include $(top_srcdir)/git.mk
diff --git a/src/gnome-boxes-search-provider.vala b/src/gnome-boxes-search-provider.vala
new file mode 100644
index 0000000..e0c5f85
--- /dev/null
+++ b/src/gnome-boxes-search-provider.vala
@@ -0,0 +1,75 @@
+// This file is part of GNOME Boxes. License: LGPLv2+
+
+[DBus (name = "org.gnome.Shell.SearchProvider")]
+public class Boxes.SearchProvider: Object {
+    SearchProviderApp app;
+
+    public SearchProvider (SearchProviderApp app) {
+        this.app = app;
+    }
+
+    private string[] search (string[] terms) {
+        string[] result = {};
+        app.hold ();
+
+        debug ("search (%s)", string.joinv (", ", terms));
+
+        app.release ();
+        return result;
+    }
+
+    public string[] GetInitialResultSet (string[] terms) {
+        return search (terms);
+    }
+
+    public string[] GetSubsearchResultSet (string[] previous_results,
+                                           string[] new_terms) {
+        return search (new_terms);
+    }
+
+    public HashTable<string, Variant>[] GetResultMetas (string[] ids) {
+        HashTable<string, Variant>[] result = {};
+        app.hold ();
+
+        debug ("GetResultMetas (%s)", string.joinv (", ", ids));
+
+        app.release ();
+        return result;
+    }
+
+    public void ActivateResult (string search_id) {
+        app.hold ();
+
+        debug ("ActivateResult (%s)", search_id);
+
+        app.release ();
+    }
+}
+
+public class Boxes.SearchProviderApp: GLib.Application {
+    public SearchProviderApp () {
+        Object (application_id: "org.gnome.Boxes.SearchProvider",
+                flags: ApplicationFlags.IS_SERVICE,
+                inactivity_timeout: 10000);
+    }
+
+    public override bool dbus_register (GLib.DBusConnection connection, string object_path) {
+        try {
+            connection.register_object (object_path, new SearchProvider (this));
+        } catch (IOError error) {
+            stderr.printf ("Could not register service: %s", error.message);
+            quit ();
+        }
+        return true;
+    }
+
+    public override void startup () {
+        if (Environment.get_variable ("BOXES_SEARCH_PROVIDER_PERSIST") != null)
+            hold ();
+        base.startup ();
+    }
+}
+
+int main () {
+    return new Boxes.SearchProviderApp ().run ();
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]