[gnome-boxes] Start GNOME Shell search provider
- From: Marc-Andre Lureau <malureau src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes] Start GNOME Shell search provider
- Date: Mon, 13 Aug 2012 12:20:53 +0000 (UTC)
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]