diff --git a/plugins/gtkgui/dialogs.py b/plugins/gtkgui/dialogs.py
index 15180ba4f..89d6fa074 100644
--- a/plugins/gtkgui/dialogs.py
+++ b/plugins/gtkgui/dialogs.py
@@ -785,6 +785,9 @@ class Popup_window:
xml = gtk.glade.XML(GTKGUI_GLADE, 'popup_window', APP)
self.window = xml.get_widget('popup_window')
close_button = xml.get_widget('close_button')
+ event_label = xml.get_widget('event_label')
+
+ event_label.set_text(str(len(self.plugin.roster.popup_windows)))
self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('green'))
@@ -802,9 +805,29 @@ class Popup_window:
gobject.timeout_add(5000, self.on_timeout, window_height)
def on_close_button_clicked(self, widget, window_height):
- self.plugin.roster.popups_height -= window_height
- widget.get_toplevel().destroy()
+ print 'window h', window_height
+ self.adjust_height_and_move_popup_windows(window_height)
def on_timeout(self, window_height):
+ self.adjust_height_and_move_popup_windows(window_height)
+ print 'window h', window_height
+
+ def adjust_height_and_move_popup_windows(self, window_height):
+ #remove
+ print 'self.plugin.roster.popups_height before', self.plugin.roster.popups_height
self.plugin.roster.popups_height -= window_height
+ print 'self.plugin.roster.popups_height now', self.plugin.roster.popups_height
+ print 'removing', self.window
self.window.destroy()
+
+ if len(self.plugin.roster.popup_windows) > 0:
+ # we want to remove the first window added in the list
+ self.plugin.roster.popup_windows.pop(0) # remove
+
+ # move the rest of popup windows
+ self.plugin.roster.popups_height = 0
+ for window_instance in self.plugin.roster.popup_windows:
+ window_width, window_height = window_instance.window.get_size()
+ self.plugin.roster.popups_height += window_height
+ window_instance.window.move(gtk.gdk.screen_width() - window_width, \
+ gtk.gdk.screen_height() - self.plugin.roster.popups_height)
diff --git a/plugins/gtkgui/groupchat_window.py b/plugins/gtkgui/groupchat_window.py
index 310d9c138..91f5e7530 100644
--- a/plugins/gtkgui/groupchat_window.py
+++ b/plugins/gtkgui/groupchat_window.py
@@ -62,7 +62,7 @@ class Groupchat_window(Chat):
"""close window"""
for room_jid in self.xmls:
if time.time() - self.last_message_time[room_jid] < 2:
- dialog = Confirmation_dialog(_('You received a message in the room %s in the last two seconds.\nDo you still want to close this window ?') % \
+ dialog = Confirmation_dialog(_('You received a message in the room %s in the last two seconds.\nDo you still want to close this window?') % \
room_jid.split('@')[0])
if dialog.get_response() != gtk.RESPONSE_YES:
return True #stop the propagation of the event
@@ -438,7 +438,7 @@ class Groupchat_window(Chat):
def remove_tab(self, room_jid):
if time.time() - self.last_message_time[room_jid] < 2:
- dialog = Confirmation_dialog(_('You received a message in the room %s in the last two seconds.\nDo you still want to close this tab ?') % \
+ dialog = Confirmation_dialog(_('You received a message in the room %s in the last two seconds.\nDo you still want to close this tab?') % \
room_jid.split('@')[0])
if dialog.get_response() != gtk.RESPONSE_YES:
return
@@ -464,30 +464,36 @@ class Groupchat_window(Chat):
#status_image, nickname, real_jid, status
store = gtk.TreeStore(gtk.Image, str, str, str)
column = gtk.TreeViewColumn('contacts')
- render_text = CellRendererImage()
- column.pack_start(render_text, expand = False)
- column.add_attribute(render_text, 'image', 0)
- render_text = gtk.CellRendererText()
- column.pack_start(render_text, expand = True)
- column.add_attribute(render_text, 'text', 1)
+ renderer_image = CellRendererImage()
+ renderer_image.set_property('width', 20)
+ column.pack_start(renderer_image, expand = False)
+ column.add_attribute(renderer_image, 'image', 0)
+ renderer_text = gtk.CellRendererText()
+ column.pack_start(renderer_text, expand = True)
+ column.add_attribute(renderer_text, 'text', 1)
self.list_treeview[room_jid].append_column(column)
self.list_treeview[room_jid].set_model(store)
-
- column = gtk.TreeViewColumn()
- render = gtk.CellRendererPixbuf()
- column.pack_start(render, expand = False)
+
+ # workaround to avoid gtk arrows to be shown
+ column = gtk.TreeViewColumn() # 2nd COLUMN
+ renderer = gtk.CellRendererPixbuf()
+ column.pack_start(renderer, expand = False)
self.list_treeview[room_jid].append_column(column)
column.set_visible(False)
self.list_treeview[room_jid].set_expander_column(column)
self.redraw_tab(room_jid)
self.show_title()
+
+ def on_join_groupchat_window_key_press_event(self, widget, event):
+ if event.keyval == gtk.keysyms.Escape:
+ widget.get_toplevel().destroy()
def on_list_treeview_button_press_event(self, widget, event):
"""popup user's group's or agent menu"""
if event.type == gtk.gdk.BUTTON_PRESS:
- if event.button == 3:
+ if event.button == 3: # right click
try:
path, column, x, y = widget.get_path_at_pos(int(event.x), \
int(event.y))
@@ -500,12 +506,26 @@ class Groupchat_window(Chat):
room_jid = self.get_active_jid()
self.mk_menu(room_jid, event, iter)
return True
- if event.button == 1:
+ if event.button == 1: # left click
try:
path, column, x, y = widget.get_path_at_pos(int(event.x), \
int(event.y))
except TypeError:
widget.get_selection().unselect_all()
+ return False
+
+ model = self.tree.get_model()
+ iter = model.get_iter(path)
+ type = model.get_value(iter, 2)
+ if (type == 'group' or type == 'account'):
+ if x < 20: # first cell in 1st column (the arrow SINGLE clicked)
+ if (self.tree.row_expanded(path)):
+ self.tree.collapse_row(path)
+ else:
+ self.tree.expand_row(path, False)
+
+ #FIXME: should popup chat window for GC contact DOUBLE clicked
+ # also chat [in contect menu]
return False
def on_list_treeview_key_press_event(self, widget, event):
@@ -515,8 +535,7 @@ class Groupchat_window(Chat):
return False
def on_list_treeview_row_activated(self, widget, path, col=0):
- """When an iter is dubble clicked :
- open the chat window"""
+ """When an iter is double clicked: open the chat window"""
model = widget.get_model()
iter = model.get_iter(path)
if len(path) == 1:
@@ -526,13 +545,11 @@ class Groupchat_window(Chat):
widget.expand_row(path, False)
def on_list_treeview_row_expanded(self, widget, iter, path):
- """When a row is expanded :
- change the icon of the arrow"""
+ """When a row is expanded: change the icon of the arrow"""
model = widget.get_model()
model.set_value(iter, 0, self.plugin.roster.pixbufs['opened'])
def on_list_treeview_row_collapsed(self, widget, iter, path):
- """When a row is collapsed :
- change the icon of the arrow"""
+ """When a row is collapsed: change the icon of the arrow"""
model = widget.get_model()
model.set_value(iter, 0, self.plugin.roster.pixbufs['closed'])
diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade
index be02514bd..d07b80fed 100644
--- a/plugins/gtkgui/gtkgui.glade
+++ b/plugins/gtkgui/gtkgui.glade
@@ -7930,6 +7930,7 @@ Custom
GDK_GRAVITY_NORTH_WEST
True
+
diff --git a/plugins/gtkgui/roster_window.py b/plugins/gtkgui/roster_window.py
index 8ca7af881..3b4f0f3cd 100644
--- a/plugins/gtkgui/roster_window.py
+++ b/plugins/gtkgui/roster_window.py
@@ -662,7 +662,7 @@ class Roster_window:
model = self.tree.get_model()
iter = model.get_iter(path)
type = model.get_value(iter, 2)
- if (type == 'group' or type == 'account'):
+ if (type == 'group'):
if x < 20: # first cell in 1st column (the arrow SINGLE clicked)
if (self.tree.row_expanded(path)):
self.tree.collapse_row(path)
@@ -918,7 +918,7 @@ class Roster_window:
def on_about_menuitem_activate(self, widget):
#About_dialog()
- Popup_window(self.plugin)
+ self.popup_windows.append( Popup_window(self.plugin) )
def on_accounts_menuitem_activate(self, widget):
if self.plugin.windows.has_key('accounts'):
@@ -1338,6 +1338,7 @@ class Roster_window:
self.newly_added = {}
self.to_be_removed = {}
self.popups_height = 0
+ self.popup_windows = []
for a in self.plugin.accounts.keys():
self.contacts[a] = {}
self.groups[a] = {}