Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Leboulanger <yann@leboulanger.org>2017-11-22 17:28:22 +0300
committerYann Leboulanger <yann@leboulanger.org>2017-11-22 17:28:22 +0300
commit3140045e78e8afe72b0672505a97a0a4875e4531 (patch)
tree34493b467c17ac625bd23871f8713a1d9e05d699
parent5d51233141f5fad722c97ec4db92ac2a8675da09 (diff)
[whiteboard] Adapt to new ChatControl design
-rw-r--r--whiteboard/manifest.ini2
-rw-r--r--whiteboard/plugin.py79
-rw-r--r--whiteboard/whiteboard_widget.ui11
3 files changed, 36 insertions, 56 deletions
diff --git a/whiteboard/manifest.ini b/whiteboard/manifest.ini
index bb08244..8b7ee91 100644
--- a/whiteboard/manifest.ini
+++ b/whiteboard/manifest.ini
@@ -1,7 +1,7 @@
[info]
name: Whiteboard
short_name: whiteboard
-version: 0.5
+version: 0.6
description: Shows a whiteboard in chat. python-pygoocanvas is required.
authors = Yann Leboulanger <asterix@lagaule.org>
homepage = https://dev.gajim.org/gajim/gajim-plugins/wikis/WhiteboardPlugin
diff --git a/whiteboard/plugin.py b/whiteboard/plugin.py
index c345fa4..321baa7 100644
--- a/whiteboard/plugin.py
+++ b/whiteboard/plugin.py
@@ -35,7 +35,8 @@ from gajim.plugins.gajimplugin import GajimPluginException
from gajim.plugins.helpers import log_calls, log
from nbxmpp import Message
from gi.repository import Gtk
-from gi.repository import GdkPixbuf
+from gi.repository import Gio
+from gi.repository import GLib
from gajim import chat_control
from gajim.common import ged
from gajim.common.jingle_session import JingleSession
@@ -61,7 +62,7 @@ class WhiteboardPlugin(GajimPlugin):
'raw-message-received': (ged.GUI1, self._nec_raw_message),
}
self.gui_extension_points = {
- 'chat_control_base' : (self.connect_with_chat_control,
+ 'chat_control' : (self.connect_with_chat_control,
self.disconnect_from_chat_control),
'chat_control_base_update_toolbar': (self.update_button_state,
None),
@@ -111,20 +112,15 @@ class WhiteboardPlugin(GajimPlugin):
if base.chat_control == control:
if control.contact.supports(NS_JINGLE_SXE) and \
control.contact.supports(NS_SXE):
- base.button.set_sensitive(True)
- tooltip_text = _('Show whiteboard')
+ base.enable_action(True)
else:
- base.button.set_sensitive(False)
- tooltip_text = _('Client on the other side '
- 'does not support the whiteboard')
- base.button.set_tooltip_text(tooltip_text)
+ base.enable_action(False)
@log_calls('WhiteboardPlugin')
def show_request_dialog(self, account, fjid, jid, sid, content_types):
def on_ok():
session = app.connections[account].get_jingle_session(fjid, sid)
self.sid = session.sid
- print(session.accepted)
if not session.accepted:
session.approve_session()
for content in content_types:
@@ -259,41 +255,24 @@ class Base(object):
self.contact = self.chat_control.contact
self.account = self.chat_control.account
self.jid = self.contact.get_full_jid()
- self.create_buttons()
+ self.add_action()
self.whiteboard = None
self.sid = None
- def create_buttons(self):
- # create whiteboard button
- actions_hbox = self.chat_control.xml.get_object('actions_hbox')
- self.button = Gtk.ToggleButton()
- self.button.set_property('relief', Gtk.ReliefStyle.NONE)
- self.button.set_property('can-focus', False)
- img = Gtk.Image()
- img_path = self.plugin.local_file_path('whiteboard.png')
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(img_path)
- iconset = Gtk.IconSet(pixbuf=pixbuf)
- factory = Gtk.IconFactory()
- factory.add('whiteboard', iconset)
- img_path = self.plugin.local_file_path('brush_tool.png')
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(img_path)
- iconset = Gtk.IconSet(pixbuf=pixbuf)
- factory.add('brush_tool', iconset)
- img_path = self.plugin.local_file_path('line_tool.png')
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(img_path)
- iconset = Gtk.IconSet(pixbuf=pixbuf)
- factory.add('line_tool', iconset)
- img_path = self.plugin.local_file_path('oval_tool.png')
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(img_path)
- iconset = Gtk.IconSet(pixbuf=pixbuf)
- factory.add('oval_tool', iconset)
- factory.add_default()
- img.set_from_stock('whiteboard', Gtk.IconSize.MENU)
- self.button.set_image(img)
- actions_hbox.pack_start(self.button, False, False, 0)
- id_ = self.button.connect('toggled', self.on_whiteboard_button_toggled)
- self.chat_control.handlers[id_] = self.button
- self.button.show()
+ def add_action(self):
+ action_name = 'toggle-whiteboard-' + self.chat_control.control_id
+ act = Gio.SimpleAction.new_stateful(
+ action_name, None, GLib.Variant.new_boolean(False))
+ act.connect('change-state', self.on_whiteboard_button_toggled)
+ self.chat_control.parent_win.window.add_action(act)
+
+ self.chat_control.control_menu.append(
+ 'WhiteBoard', 'win.' + action_name)
+
+ def enable_action(self, state):
+ win = self.chat_control.parent_win.window
+ action_name = 'toggle-whiteboard-' + self.chat_control.control_id
+ win.lookup_action(action_name).set_enabled(state)
def draw_whiteboard(self, content):
hbox = self.chat_control.xml.get_object('chat_control_hbox')
@@ -304,15 +283,17 @@ class Base(object):
self.whiteboard.hbox.set_size_request(300, 0)
hbox.pack_start(self.whiteboard.hbox, False, False, 0)
self.whiteboard.hbox.show_all()
- self.button.set_active(True)
+ self.enable_action(True)
content.control = self
self.sid = content.session.sid
- def on_whiteboard_button_toggled(self, widget):
+ def on_whiteboard_button_toggled(self, action, param):
"""
Popup whiteboard
"""
- if widget.get_active():
+ action.set_state(param)
+ state = param.get_boolean()
+ if state:
if not self.whiteboard:
self.start_whiteboard()
else:
@@ -334,7 +315,7 @@ class Base(object):
session = conn.get_jingle_session(self.jid, media='xhtml')
if session:
session.end_session()
- self.button.set_active(False)
+ self.enable_action(False)
if reason:
txt = _('Whiteboard stopped: %(reason)s') % {'reason': reason}
self.chat_control.print_conversation(txt, 'info')
@@ -347,8 +328,12 @@ class Base(object):
self.whiteboard = None
def disconnect_from_chat_control(self):
- actions_hbox = self.chat_control.xml.get_object('actions_hbox')
- actions_hbox.remove(self.button)
+ menu = self.chat_control.control_menu
+ for i in range(menu.get_n_items()):
+ label = menu.get_item_attribute_value(i, 'label')
+ if label.get_string() == 'WhiteBoard':
+ menu.remove(i)
+ break
class JingleWhiteboard(JingleContent):
''' Jingle Whiteboard sessions consist of xhtml content'''
diff --git a/whiteboard/whiteboard_widget.ui b/whiteboard/whiteboard_widget.ui
index 750c162..9858771 100644
--- a/whiteboard/whiteboard_widget.ui
+++ b/whiteboard/whiteboard_widget.ui
@@ -36,7 +36,7 @@
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">brush_tool</property>
+ <property name="pixbuf">brush_tool.png</property>
</object>
</child>
</object>
@@ -57,7 +57,7 @@
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">oval_tool</property>
+ <property name="pixbuf">oval_tool.png</property>
</object>
</child>
</object>
@@ -78,7 +78,7 @@
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">line_tool</property>
+ <property name="pixbuf">line_tool.png</property>
</object>
</child>
</object>
@@ -193,9 +193,4 @@
</packing>
</child>
</object>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-delete</property>
- </object>
</interface>