|
2 | 2 |
|
3 | 3 | import os
|
4 | 4 | import gi
|
| 5 | +import sys |
| 6 | +import dbus |
5 | 7 | import shutil
|
6 | 8 | import signal
|
7 | 9 | import argparse
|
8 | 10 | import webbrowser
|
| 11 | +import dbus.service |
9 | 12 |
|
10 | 13 | gi.require_version('Gtk', '3.0')
|
11 | 14 | gi.require_version('Gdk', '3.0')
|
12 | 15 | gi.require_version('GLib', '2.0')
|
13 | 16 | gi.require_version('WebKit2', '4.0')
|
14 | 17 |
|
15 | 18 | 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' |
16 | 23 |
|
17 | 24 |
|
18 | 25 | class DevdocsDesktop:
|
@@ -86,6 +93,11 @@ def run(self):
|
86 | 93 | def quit(self):
|
87 | 94 | Gtk.main_quit()
|
88 | 95 |
|
| 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 | + |
89 | 101 | def url_with_search(self):
|
90 | 102 | url = "%s#q=%s" % (self.app_url, self.search)
|
91 | 103 | return url
|
@@ -308,8 +320,30 @@ def js_open_link(self, link):
|
308 | 320 | self.js_click_element(link)
|
309 | 321 |
|
310 | 322 |
|
| 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 | + |
311 | 338 | if __name__ == '__main__':
|
| 339 | + DBusGMainLoop(set_as_default=True) |
312 | 340 | signal.signal(signal.SIGINT, signal.SIG_DFL)
|
313 | 341 |
|
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