Changeset 6361
- Timestamp:
- 05/26/06 15:19:52 (3 years ago)
- Location:
- trunk
- Files:
-
- 4 modified
-
data/glade/vcard_information_window.glade (modified) (2 diffs)
-
src/chat_control.py (modified) (2 diffs)
-
src/gtkgui_helpers.py (modified) (2 diffs)
-
src/vcard.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/data/glade/vcard_information_window.glade
r6305 r6361 18 18 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> 19 19 <property name="focus_on_map">True</property> 20 <property name="urgency_hint">False</property> 20 21 <signal name="destroy" handler="on_vcard_information_window_destroy" last_modification_time="Sun, 24 Jul 2005 19:35:15 GMT"/> 21 22 <signal name="key_press_event" handler="on_vcard_information_window_key_press_event" last_modification_time="Thu, 07 Apr 2005 10:06:13 GMT"/> … … 2322 2323 2323 2324 <child> 2324 <widget class="Gtk Image" id="PHOTO_image">2325 <widget class="GtkEventBox" id="PHOTO_eventbox"> 2325 2326 <property name="visible">True</property> 2326 <property name="xalign">0.5</property> 2327 <property name="yalign">0.5</property> 2328 <property name="xpad">0</property> 2329 <property name="ypad">0</property> 2327 <property name="visible_window">True</property> 2328 <property name="above_child">False</property> 2329 2330 <child> 2331 <widget class="GtkImage" id="PHOTO_image"> 2332 <property name="visible">True</property> 2333 <property name="xalign">0.5</property> 2334 <property name="yalign">0.5</property> 2335 <property name="xpad">0</property> 2336 <property name="ypad">0</property> 2337 </widget> 2338 </child> 2330 2339 </widget> 2331 2340 <packing> -
trunk/src/chat_control.py
r6293 r6361 755 755 self.handlers[id] = widget 756 756 757 widget = self.xml.get_widget('avatar_eventbox')758 757 id = widget.connect('leave-notify-event', self.on_avatar_eventbox_leave_notify_event) 758 self.handlers[id] = widget 759 760 id = widget.connect('button-press-event', self.on_avatar_eventbox_button_press_event) 759 761 self.handlers[id] = widget 760 762 … … 803 805 if self.show_bigger_avatar_timeout_id is not None: 804 806 gobject.source_remove(self.show_bigger_avatar_timeout_id) 807 808 def on_avatar_eventbox_button_press_event(self, widget, event): 809 '''If right-clicked, show popup''' 810 if event.button == 3: # right click 811 menu = gtk.Menu() 812 menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS) 813 id = menuitem.connect('activate', 814 gtkgui_helpers.on_avatar_save_as_menuitem_activate, 815 self.contact.jid, self.account, self.contact.name + '.jpeg') 816 self.handlers[id] = menuitem 817 menu.append(menuitem) 818 menu.show_all() 819 menu.connect('selection-done', lambda w:w.destroy()) 820 # show the menu 821 menu.show_all() 822 menu.popup(None, None, None, event.button, event.time) 823 return True 805 824 806 825 def _on_window_motion_notify(self, widget, event): -
trunk/src/gtkgui_helpers.py
r6300 r6361 26 26 27 27 import vcard 28 import dialogs 28 29 29 30 … … 667 668 def destroy_widget(widget): 668 669 widget.destroy() 670 671 def on_avatar_save_as_menuitem_activate(widget, jid, account, 672 default_name = ''): 673 def on_ok(widget): 674 def on_ok2(widget, file_path, pixbuf): 675 pixbuf.save(file_path, 'jpeg') 676 dialog2.destroy() 677 dialog.destroy() 678 679 file_path = dialog.get_filename() 680 file_path = decode_filechooser_file_paths((file_path,))[0] 681 if os.path.exists(file_path): 682 dialog2 = dialogs.FTOverwriteConfirmationDialog( 683 _('This file already exists'), _('What do you want to do?'), 684 False) 685 dialog2.set_transient_for(dialog) 686 dialog2.set_destroy_with_parent(True) 687 response = dialog2.get_response() 688 if response < 0: 689 return 690 691 # Get pixbuf 692 pixbuf = None 693 is_fake = False 694 if gajim.contacts.is_pm_from_jid(account, jid): 695 is_fake = True 696 pixbuf = get_avatar_pixbuf_from_cache(jid, is_fake) 697 698 ext = file_path.split('.')[-1] 699 type_ = '' 700 if not ext: 701 # Silently save as Jpeg image 702 file_path += '.jpeg' 703 type_ = 'jpeg' 704 elif ext == 'jpg': 705 type_ = 'jpeg' 706 else: 707 type_ = ext 708 709 # Save image 710 try: 711 pixbuf.save(file_path, type_) 712 except: 713 os.remove(file_path) 714 new_file_path = '.'.join(file_path.split('.')[:-1]) + '.jpeg' 715 dialog2 = dialogs.ConfirmationDialog(_('Extension not supported'), 716 _('Image cannot be saved in %(type)s format. Save as %(new_filename)s?') % {'type': type_, 'new_filename': new_file_path}, 717 on_response_ok = (on_ok2, new_file_path, pixbuf)) 718 else: 719 dialog.destroy() 720 721 def on_cancel(widget): 722 dialog.destroy() 723 724 dialog = dialogs.FileChooserDialog( 725 title_text = _('Save Image as...'), 726 action = gtk.FILE_CHOOSER_ACTION_SAVE, 727 buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, 728 gtk.STOCK_SAVE, gtk.RESPONSE_OK), 729 default_response = gtk.RESPONSE_OK, 730 current_folder = gajim.config.get('last_save_dir'), 731 on_response_ok = on_ok, 732 on_response_cancel = on_cancel) 733 734 dialog.set_current_name(default_name) 735 dialog.connect('delete-event', lambda widget, event: 736 on_cancel(widget)) -
trunk/src/vcard.py
r6290 r6361 81 81 self.avatar_mime_type = None 82 82 self.avatar_encoded = None 83 self.avatar_save_as_id = None 83 84 84 85 if vcard: # we view/edit our own vcard … … 156 157 self.xml.get_widget('PHOTO_image').set_from_pixbuf(None) 157 158 self.avatar_encoded = None 159 self.xml.get_widget('PHOTO_eventbox').disconnect(self.avatar_save_as_id) 160 self.avatar_save_as_id = None 158 161 159 162 def on_set_avatar_button_clicked(self, widget): … … 205 208 self.dialog = dialogs.ImageChooserDialog(on_response_ok = on_ok) 206 209 210 def on_PHOTO_eventbox_button_press_event(self, widget, event): 211 '''If right-clicked, show popup''' 212 if event.button == 3: # right click 213 menu = gtk.Menu() 214 menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS) 215 menuitem.connect('activate', 216 gtkgui_helpers.on_avatar_save_as_menuitem_activate, 217 self.contact.jid, self.account, self.contact.name + '.jpeg') 218 menu.append(menuitem) 219 menu.show_all() 220 menu.connect('selection-done', lambda w:w.destroy()) 221 # show the menu 222 menu.show_all() 223 menu.popup(None, None, None, event.button, event.time) 224 207 225 def set_value(self, entry_name, value): 208 226 try: … … 221 239 pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard') 222 240 image.set_from_pixbuf(pixbuf) 241 eventbox = self.xml.get_widget('PHOTO_eventbox') 242 self.avatar_save_as_id = eventbox.connect('button-press-event', 243 self.on_PHOTO_eventbox_button_press_event) 223 244 continue 224 245 if i == 'ADR' or i == 'TEL' or i == 'EMAIL': … … 454 475 self.xml.get_widget('DESC_textview').get_buffer().set_text('') 455 476 self.xml.get_widget('PHOTO_image').set_from_pixbuf(None) 477 self.xml.get_widget('PHOTO_eventbox').disconnect( 478 self.avatar_save_as_id) 479 self.avatar_save_as_id = None 456 480 gajim.connections[self.account].request_vcard(self.jid) 457 481 else:
