From edfbae39e48f339d97c36cc5f9df0c055ef3533a Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Mon, 25 Jun 2018 10:07:16 +0800 Subject: [PATCH] Update browser tab title after title changed. --- app/browser/buffer.py | 7 ++++++- core/buffer.py | 6 +++++- core/eaf.py | 17 +++++++++++++---- eaf.el | 17 +++++++++++++++++ 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/browser/buffer.py b/app/browser/buffer.py index ce57ca2..15a6f67 100644 --- a/app/browser/buffer.py +++ b/app/browser/buffer.py @@ -31,6 +31,8 @@ class BrowserBuffer(Buffer): self.buffer_widget = QWebView() self.buffer_widget.resize(self.width, self.height) self.buffer_widget.setUrl(QUrl(url)) + + self.buffer_widget.titleChanged.connect(self.change_title) print("Create buffer: %s" % buffer_id) @@ -38,4 +40,7 @@ class BrowserBuffer(Buffer): self.width = width self.height = height self.buffer_widget.resize(self.width, self.height) - + + def change_title(self, title): + self.update_title.emit(self.buffer_id, title) + diff --git a/core/buffer.py b/core/buffer.py index 7910132..c5b1cb2 100644 --- a/core/buffer.py +++ b/core/buffer.py @@ -51,10 +51,14 @@ class postGui(QtCore.QObject): else: self._func(*args, **kwargs) -class Buffer(object): +class Buffer(QtCore.QObject): __metaclass__ = abc.ABCMeta + + update_title = QtCore.pyqtSignal(str, str) def __init__(self, buffer_id, url, width, height, background_color): + super(Buffer, self).__init__() + self.width = width self.height = height diff --git a/core/eaf.py b/core/eaf.py index 9233269..f6e7527 100755 --- a/core/eaf.py +++ b/core/eaf.py @@ -62,20 +62,20 @@ class EAF(dbus.service.Object): if url.startswith("/"): if url.endswith(".jpg") or url.endswith(".png"): - self.buffer_dict[buffer_id] = ImageViewerBuffer(buffer_id, url, emacs_width, emacs_height) + self.create_buffer(buffer_id, ImageViewerBuffer(buffer_id, url, emacs_width, emacs_height)) elif url.endswith(".ogg"): - self.buffer_dict[buffer_id] = VideoPlayerBuffer(buffer_id, url, emacs_width, emacs_height) + self.create_buffer(buffer_id, VideoPlayerBuffer(buffer_id, url, emacs_width, emacs_height)) else: return "Don't know how to open {0}".format(url) else: from urllib.parse import urlparse result = urlparse(url) if len(result.scheme) != 0: - self.buffer_dict[buffer_id] = BrowserBuffer(buffer_id, result.geturl(), emacs_width, emacs_height) + self.create_buffer(buffer_id, BrowserBuffer(buffer_id, result.geturl(), emacs_width, emacs_height)) else: result = urlparse("{0}:{1}".format("http", url)) if result.scheme != "": - self.buffer_dict[buffer_id] = BrowserBuffer(buffer_id, result.geturl(), emacs_width, emacs_height) + self.create_buffer(buffer_id, BrowserBuffer(buffer_id, result.geturl(), emacs_width, emacs_height)) else: return "{0} is not valid url".format(url) @@ -132,6 +132,15 @@ class EAF(dbus.service.Object): @dbus.service.signal("com.lazycat.eaf") def start_finish(self): pass + + @dbus.service.signal("com.lazycat.eaf") + def update_buffer_title(self, buffer_id, title): + pass + + def create_buffer(self, buffer_id, app_buffer): + self.buffer_dict[buffer_id] = app_buffer + + app_buffer.update_title.connect(self.update_buffer_title) def send_mouse_event_to_buffer(self, buffer_id, view_width, view_height, view_image_width, view_image_height, event): print("Send mouse: %s %s" % (buffer_id, event)) diff --git a/eaf.el b/eaf.el index fea8e65..309e708 100644 --- a/eaf.el +++ b/eaf.el @@ -310,6 +310,23 @@ We need calcuate render allocation to make sure no black border around render co "com.lazycat.eaf" "start_finish" 'eaf-start-finish) +(defun eaf-update-buffer-title (bid title) + (catch 'find-buffer + (dolist (window (window-list)) + (let ((buffer (window-buffer window))) + (with-current-buffer buffer + (when (and + (string= "eaf-mode" (format "%s" major-mode)) + (equal buffer-id bid)) + (rename-buffer title) + (throw 'find-buffer t) + )))))) + +(dbus-register-signal + :session "com.lazycat.eaf" "/com/lazycat/eaf" + "com.lazycat.eaf" "update_buffer_title" + 'eaf-update-buffer-title) + (add-hook 'window-configuration-change-hook #'eaf-monitor-configuration-change) (add-hook 'pre-command-hook #'eaf-monitor-key-event) (add-hook 'kill-buffer-hook #'eaf-monitor-buffer-kill)