more OO for systraywin32

This commit is contained in:
Nikos Kouremenos 2005-08-11 13:46:37 +00:00
parent b4ae315349
commit 20ac157556
2 changed files with 43 additions and 82 deletions

View File

@ -182,7 +182,7 @@ class Systray:
account_menu_for_new_message.append(item)
elif len(gajim.connections) == 1: # one account
# one account, no need to show 'as jid
# one account, no need to show 'as jid'
# for chat_with
account = gajim.connections.keys()[0]
@ -193,7 +193,7 @@ class Systray:
self.new_message_handler_id = new_message_menuitem.connect(
'activate', self.on_new_message_menuitem_activate, account)
if event is not None:
if event is not None: # None means windows (we explicitly popup in systraywin32.py)
self.systray_context_menu.popup(None, None, None, event.button, event.time)
self.systray_context_menu.show_all()
@ -238,39 +238,46 @@ class Systray:
return groups_menu
def on_clicked(self, widget, event):
self.on_tray_leave_notify_event(widget, None)
def on_left_click(self):
win = self.plugin.roster.window
if event.button == 1: # Left click
if len(self.jids) == 0:
if win.get_property('visible'):
win.hide()
else:
win.present()
else:
account = self.jids[0][0]
jid = self.jids[0][1]
acc = self.plugin.windows[account]
w = None
if acc['gc'].has_key(jid):
w = acc['gc'][jid]
elif acc['chats'].has_key(jid):
w = acc['chats'][jid]
else:
self.plugin.roster.new_chat(
gajim.contacts[account][jid][0], account)
acc['chats'][jid].set_active_tab(jid)
acc['chats'][jid].window.present()
if w:
w.set_active_tab(jid)
w.window.present()
tv = w.xmls[jid].get_widget('conversation_textview')
w.scroll_to_end(tv)
if event.button == 2: # middle click
if win.is_active():
if len(self.jids) == 0:
if win.get_property('visible'):
win.hide()
else:
win.present()
else:
account = self.jids[0][0]
jid = self.jids[0][1]
acc = self.plugin.windows[account]
w = None
if acc['gc'].has_key(jid):
w = acc['gc'][jid]
elif acc['chats'].has_key(jid):
w = acc['chats'][jid]
else:
self.plugin.roster.new_chat(
gajim.contacts[account][jid][0], account)
acc['chats'][jid].set_active_tab(jid)
acc['chats'][jid].window.present()
if w:
w.set_active_tab(jid)
w.window.present()
tv = w.xmls[jid].get_widget('conversation_textview')
w.scroll_to_end(tv)
def on_middle_click(self):
win = self.plugin.roster.window
if win.is_active():
win.hide()
else:
win.present()
def on_clicked(self, widget, event):
self.on_tray_leave_notify_event(widget, None)
if event.button == 1: # Left click
self.on_left_click()
if event.button == 2: # middle click
self.on_middle_click()
if event.button == 3: # right click
self.make_menu(event)

View File

@ -20,6 +20,7 @@ WS_EX_LAYERED = 0x80000
import gtk
WM_LBUTTONUP = 0x0202
WM_MBUTTONUP = 0x0208
WM_RBUTTONUP = 0x0205
from common import gajim
@ -200,6 +201,7 @@ class NotifyIcon:
class SystrayWin32(systray.Systray):
def __init__(self, plugin):
# Note: gtk window must be realized before installing extensions.
systray.Systray.__init__(self, plugin)
self.plugin = plugin
self.jids = []
self.status = 'offline'
@ -224,62 +226,14 @@ class SystrayWin32(systray.Systray):
def hide_icon(self):
self.win32ext.remove_notify_icon()
def make_menu(self):
"""create chat with and new message (sub) menus/menuitems"""
chat_with_menuitem = self.xml.get_widget('chat_with_menuitem')
new_message_menuitem = self.xml.get_widget('new_message_menuitem')
iskey = len(gajim.connections.keys()) > 0
chat_with_menuitem.set_sensitive(iskey)
new_message_menuitem.set_sensitive(iskey)
if len(gajim.connections.keys()) >= 2: # 2 or more accounts? make submenus
account_menu_for_chat_with = gtk.Menu()
chat_with_menuitem.set_submenu(account_menu_for_chat_with)
account_menu_for_new_message = gtk.Menu()
new_message_menuitem.set_submenu(account_menu_for_new_message)
for account in gajim.connections:
our_jid = gajim.config.get_per('accounts', account, 'name') + '@' +\
gajim.config.get_per('accounts', account, 'hostname')
#for chat_with
item = gtk.MenuItem(_('as ') + our_jid)
account_menu_for_chat_with.append(item)
group_menu = self.make_groups_submenus_for_chat_with(account)
item.set_submenu(group_menu)
#for new_message
item = gtk.MenuItem(_('as ') + our_jid)
item.connect('activate',\
self.on_new_message_menuitem_activate, account)
account_menu_for_new_message.append(item)
def on_clicked(self, hwnd, message, wparam, lparam):
if lparam == WM_RBUTTONUP: # Right click
self.make_menu()
self.win32ext.notify_icon.menu.popup(None, None, None, 0, 0)
elif lparam == WM_MBUTTONUP: # Middle click
self.on_middle_click()
elif lparam == WM_LBUTTONUP: # Left click
if len(self.jids) == 0:
win = self.plugin.roster.window
if win.is_active():
win.hide()
else:
win.present()
else:
account = self.jids[0][0]
jid = self.jids[0][1]
acc = self.plugin.windows[account]
if acc['gc'].has_key(jid):
acc['gc'][jid].set_active_tab(jid)
acc['gc'][jid].window.present()
elif acc['chats'].has_key(jid):
acc['chats'][jid].set_active_tab(jid)
acc['chats'][jid].window.present()
else:
self.plugin.roster.new_chat(
self.plugin.roster.contacts[account][jid][0], account)
acc['chats'][jid].set_active_tab(jid)
acc['chats'][jid].window.present()
self.on_left_click()
#self.win32ext.notify_icon.menu.popdown()
#self.win32ext.notify_icon.menu.popup(None, None, None, 0, 0)