Skip to content

Commit 9d516d0

Browse files
committed
add dbus service for single app instance
fixes ssue #8
1 parent c695ff8 commit 9d516d0

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

devdocs_desktop.py

+36-2
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,24 @@
22

33
import os
44
import gi
5+
import sys
6+
import dbus
57
import shutil
68
import signal
79
import argparse
810
import webbrowser
11+
import dbus.service
912

1013
gi.require_version('Gtk', '3.0')
1114
gi.require_version('Gdk', '3.0')
1215
gi.require_version('GLib', '2.0')
1316
gi.require_version('WebKit2', '4.0')
1417

1518
from gi.repository import Gtk, Gdk, GLib, WebKit2
19+
from dbus.mainloop.glib import DBusGMainLoop
20+
21+
BUS_NAME = 'org.hardpixel.DevdocsDesktop'
22+
BUS_PATH = '/org/hardpixel/DevdocsDesktop'
1623

1724

1825
class DevdocsDesktop:
@@ -86,6 +93,11 @@ def run(self):
8693
def quit(self):
8794
Gtk.main_quit()
8895

96+
def search_term(self, term):
97+
self.search = term
98+
self.header_search.set_text(self.search)
99+
self.webview.load_uri(self.url_with_search())
100+
89101
def url_with_search(self):
90102
url = "%s#q=%s" % (self.app_url, self.search)
91103
return url
@@ -308,8 +320,30 @@ def js_open_link(self, link):
308320
self.js_click_element(link)
309321

310322

323+
class DevdocsDesktopService(dbus.service.Object):
324+
325+
def __init__(self, app):
326+
self.app = app
327+
bus_name = dbus.service.BusName(BUS_NAME, bus=dbus.SessionBus())
328+
dbus.service.Object.__init__(self, bus_name, BUS_PATH)
329+
330+
@dbus.service.method(dbus_interface=BUS_NAME)
331+
332+
def search(self, argv):
333+
term = str(argv[-1])
334+
self.app.search_term(term)
335+
self.app.window.present_with_time(Gdk.CURRENT_TIME)
336+
337+
311338
if __name__ == '__main__':
339+
DBusGMainLoop(set_as_default=True)
312340
signal.signal(signal.SIGINT, signal.SIG_DFL)
313341

314-
devdocs = DevdocsDesktop()
315-
devdocs.run()
342+
if dbus.SessionBus().request_name(BUS_NAME) != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER:
343+
devdocs = dbus.SessionBus().get_object(BUS_NAME, BUS_PATH)
344+
method = devdocs.get_dbus_method('search')
345+
method(sys.argv)
346+
else:
347+
devdocs = DevdocsDesktop()
348+
service = DevdocsDesktopService(devdocs)
349+
devdocs.run()

0 commit comments

Comments
 (0)