Author: asterix
Date: 2007-09-15 12:11:46 +0200 (Sat, 15 Sep 2007)
New Revision: 8817
Modified:
trunk/src/chat_control.py
trunk/src/common/helpers.py
trunk/src/groupchat_control.py
trunk/src/message_window.py
Log:
add key shortcut to open history and information window. fixes #3233
Modified: trunk/src/chat_control.py
===================================================================
--- trunk/src/chat_control.py 2007-09-14 20:50:19 UTC (rev 8816)
+++ trunk/src/chat_control.py 2007-09-15 10:11:46 UTC (rev 8817)
@@ -392,6 +392,7 @@
event.keyval == gtk.keysyms.Page_Up:
self.parent_win.notebook.emit('key_press_event', event)
return True
+
elif event.keyval == gtk.keysyms.m and \
(event.state & gtk.gdk.MOD1_MASK): # alt + m opens emoticons menu
if gajim.config.get('emoticons_theme'):
@@ -966,6 +967,12 @@
id = widget.connect('clicked', self.on_actions_button_clicked)
self.handlers[id] = widget
+ ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
+ key, mod = gtk.accelerator_parse("<Control>h")
+ ag.connect_group(key, mod, gtk.ACCEL_VISIBLE, self.accel_group_func)
+ key, mod = gtk.accelerator_parse("<Control>i")
+ ag.connect_group(key, mod, gtk.ACCEL_VISIBLE, self.accel_group_func)
+
compact_view = gajim.config.get('compact_view')
self.chat_buttons_set_visible(compact_view)
self.widget_set_visible(self.xml.get_widget('banner_eventbox'),
@@ -1570,7 +1577,7 @@
'''
xml = gtkgui_helpers.get_glade('chat_control_popup_menu.glade')
menu = xml.get_widget('chat_control_popup_menu')
-
+
history_menuitem = xml.get_widget('history_menuitem')
toggle_gpg_menuitem = xml.get_widget('toggle_gpg_menuitem')
toggle_e2e_menuitem = xml.get_widget('toggle_e2e_menuitem')
@@ -1578,14 +1585,16 @@
send_file_menuitem = xml.get_widget('send_file_menuitem')
information_menuitem = xml.get_widget('information_menuitem')
convert_to_gc_menuitem = xml.get_widget('convert_to_groupchat')
-
+
+ ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
+ history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h, gtk.gdk.CONTROL_MASK,
+ gtk.ACCEL_VISIBLE)
+ information_menuitem.add_accelerator('activate', ag, gtk.keysyms.i,
+ gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
+
contact = self.parent_win.get_active_contact()
jid = contact.jid
-
- # history_menuitem
- if gajim.jid_is_transport(jid):
- history_menuitem.set_sensitive(False)
-
+
# check if gpg capabitlies or else make gpg toggle insensitive
gpg_btn = self.xml.get_widget('gpg_togglebutton')
isactive = gpg_btn.get_active()
@@ -1643,9 +1652,25 @@
id = convert_to_gc_menuitem.connect('activate',
self._on_convert_to_gc_menuitem_activate)
self.handlers[id] = convert_to_gc_menuitem
- menu.connect('selection-done', lambda w:w.destroy())
+ menu.connect('selection-done', self.destroy_menu, history_menuitem,
+ information_menuitem)
return menu
+ def destroy_menu(self, menu, history_menuitem, information_menuitem):
+ # destroy accelerators
+ ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
+ history_menuitem.remove_accelerator(ag, gtk.keysyms.h, gtk.gdk.CONTROL_MASK)
+ information_menuitem.remove_accelerator(ag, gtk.keysyms.i, gtk.gdk.CONTROL_MASK)
+ # destroy menu
+ menu.destroy()
+
+ def accel_group_func(self, accel_group, acceleratable, keyval, modifier):
+ if modifier & gtk.gdk.CONTROL_MASK:
+ if keyval == gtk.keysyms.h:
+ self._on_history_menuitem_activate()
+ if keyval == gtk.keysyms.i:
+ self._on_contact_information_menuitem_activate(None)
+
def send_chatstate(self, state, contact = None):
''' sends OUR chatstate as STANDLONE chat state message (eg. no body)
to contact only if new chatstate is different from the previous one
Modified: trunk/src/common/helpers.py
===================================================================
--- trunk/src/common/helpers.py 2007-09-14 20:50:19 UTC (rev 8816)
+++ trunk/src/common/helpers.py 2007-09-15 10:11:46 UTC (rev 8817)
@@ -722,11 +722,10 @@
full_path_to_executable = is_in_path(executable, return_abs_path = True)
if full_path_to_executable:
command = executable + params
- child_stdin, child_stdout = os.popen2(command)
- output = temp_failure_retry(child_stdout.readline).strip()
- child_stdout.close()
- child_stdin.close()
- os.wait()
+ p = Popen([command], shell=True, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, close_fds=True)
+ p.wait()
+ output = temp_failure_retry(p.stdout.readline).strip()
# some distros put n/a in places, so remove those
output = output.replace('n/a', '').replace('N/A', '')
return output
Modified: trunk/src/groupchat_control.py
===================================================================
--- trunk/src/groupchat_control.py 2007-09-14 20:50:19 UTC (rev 8816)
+++ trunk/src/groupchat_control.py 2007-09-15 10:11:46 UTC (rev 8817)
@@ -193,6 +193,10 @@
self.on_list_treeview_leave_notify_event)
self.handlers[id] = widget
+ ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
+ key, mod = gtk.accelerator_parse("<Control>h")
+ ag.connect_group(key, mod, gtk.ACCEL_VISIBLE, self.accel_group_func)
+
self.room_jid = self.contact.jid
self.nick = contact.name
self.name = self.room_jid.split('@')[0]
@@ -250,9 +254,9 @@
self._on_change_subject_menuitem_activate)
self.handlers[id] = self.change_subject_menuitem
- widget = xm.get_widget('history_menuitem')
- id = widget.connect('activate', self._on_history_menuitem_activate)
- self.handlers[id] = widget
+ self.history_menuitem = xm.get_widget('history_menuitem')
+ id = self.history_menuitem.connect('activate', self._on_history_menuitem_activate)
+ self.handlers[id] = self.history_menuitem
self.minimize_menuitem = xm.get_widget('minimize_menuitem')
id = self.minimize_menuitem.connect('toggled',
@@ -507,6 +511,9 @@
def prepare_context_menu(self):
'''sets sensitivity state for configure_room'''
+ ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
+ self.history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h,
+ gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
if self.contact.jid in gajim.config.get_per('accounts', self.account,
'minimized_gc').split(' '):
self.minimize_menuitem.set_active(True)
@@ -533,6 +540,11 @@
self.change_nick_menuitem.set_sensitive(False)
return self.gc_popup_menu
+ def accel_group_func(self, accel_group, acceleratable, keyval, modifier):
+ if modifier & gtk.gdk.CONTROL_MASK:
+ if keyval == gtk.keysyms.h:
+ self._on_history_menuitem_activate()
+
def on_message(self, nick, msg, tim, has_timestamp = False, xhtml = None,
status_code = []):
if '100' in status_code:
Modified: trunk/src/message_window.py
===================================================================
--- trunk/src/message_window.py 2007-09-14 20:50:19 UTC (rev 8816)
+++ trunk/src/message_window.py 2007-09-15 10:11:46 UTC (rev 8817)
@@ -70,6 +70,9 @@
id = self.window.connect('focus-in-event', self._on_window_focus)
self.handlers[id] = self.window
+ accel_group = gtk.AccelGroup()
+ self.window.add_accel_group(accel_group)
+
# gtk+ doesn't make use of the motion notify on gtkwindow by default
# so this line adds that
self.window.add_events(gtk.gdk.POINTER_MOTION_MASK)