Philipp Hörist pushed to branch gajim_1.0 at gajim / gajim
Commits:
-
3db5e027
by Philipp Hörist at 2018-03-17T17:39:32+01:00
-
f83cdf69
by Philipp Hörist at 2018-03-17T17:48:57+01:00
-
2b2f1687
by Philipp Hörist at 2018-03-17T17:49:24+01:00
-
78c04169
by Philipp Hörist at 2018-03-17T17:50:17+01:00
6 changed files:
- ChangeLog
- gajim/app_actions.py
- gajim/dialogs.py
- gajim/gajim.py
- gajim/gajim_remote.py
- gajim/remote_control.py
Changes:
| 1 |
-Gajim 1.0.0 (15 March 2018)
|
|
| 2 |
-
|
|
| 3 |
- * Add support for geo: URIs
|
|
| 4 |
- * More improvements for HiDPI Screens
|
|
| 5 |
- * Fixed various MAM related issues
|
|
| 6 |
- * Various other small bugfixes
|
|
| 7 |
- |
|
| 8 |
-Gajim 0.99.2 (17 February 2018)
|
|
| 9 |
-
|
|
| 10 |
- * Speed up DB querys on MAM sync
|
|
| 11 |
- * Fix config file encoding
|
|
| 12 |
- * Bug fixes
|
|
| 1 |
+Gajim 1.0.0 (17 March 2018)
|
|
| 13 | 2 |
|
| 14 |
-Gajim 0.99.1 (08 February 2018)
|
|
| 15 |
-
|
|
| 3 |
+ * Ported to GTK3 / Python3
|
|
| 16 | 4 |
* Integrate HTTPUpload
|
| 17 | 5 |
* Add Navigation buttons in History Window
|
| 18 |
- * Added XEP-0368 (SRV records for XMPP over TLS)
|
|
| 19 | 6 |
* Improvements for HiDPI Screens
|
| 20 |
- * Move Chat Menu button so we are not forced to use CSD
|
|
| 21 | 7 |
* Depend on the python keyring package for password storage
|
| 22 |
- * Bug fixes
|
|
| 23 |
- |
|
| 24 |
-Gajim 0.98.2 (17 December 2017)
|
|
| 25 |
- |
|
| 26 |
- * Fix DB migration
|
|
| 27 |
- |
|
| 28 |
-Gajim 0.98.1 (15 December 2017)
|
|
| 29 |
- |
|
| 30 |
- * Ported to GTK3 / Python3
|
|
| 31 | 8 |
* Flatpak support
|
| 32 | 9 |
* Lots of refactoring
|
| 33 | 10 |
* New Emoji support
|
| ... | ... | @@ -40,14 +17,22 @@ Gajim 0.98.1 (15 December 2017) |
| 40 | 17 |
* Added mam:1 and mam:2 support (mam:0 was removed)
|
| 41 | 18 |
* Added MAM for MUCs support
|
| 42 | 19 |
* Added support for showing XEP-0084 Avatars
|
| 20 |
+ * Add support for geo: URIs
|
|
| 43 | 21 |
* Added xmpp URI handling directly in Gajim
|
| 44 | 22 |
* Removed Gajim-Remote
|
| 45 | 23 |
* Removed XEP-0012 (Last Activity)
|
| 46 | 24 |
* Removed XEP-0136 (Message Archiving)
|
| 47 | 25 |
* Added XEP-0156 (Discovering Alternative XMPP Connection Methods)
|
| 48 | 26 |
* Added XEP-0319 (Last User Interaction in Presence)
|
| 27 |
+ * Added XEP-0368 (SRV records for XMPP over TLS)
|
|
| 49 | 28 |
* Added XEP-0380 (Explicit Message Encryption)
|
| 50 | 29 |
* Added Jingle FT:5 support
|
| 30 |
+ * Lots of other small bugfixes
|
|
| 31 |
+ |
|
| 32 |
+ KNOWN ISSUES:
|
|
| 33 |
+ |
|
| 34 |
+ - Meta Contacts: Filtering the roster could lead to a crash in some circumstances. Use CTRL + N for starting new chats as a workaround
|
|
| 35 |
+ - Audio/Video support is currently not maintained and most likely not working
|
|
| 51 | 36 |
|
| 52 | 37 |
Gajim 0.16.9 (30 November 2017)
|
| 53 | 38 |
|
| ... | ... | @@ -286,3 +286,13 @@ class AppActions(): |
| 286 | 286 |
win.present()
|
| 287 | 287 |
else:
|
| 288 | 288 |
app.interface.create_ipython_window()
|
| 289 |
+ |
|
| 290 |
+ def show_next_pending_event(self, action, param):
|
|
| 291 |
+ """
|
|
| 292 |
+ Show the window(s) with next pending event in tabbed/group chats
|
|
| 293 |
+ """
|
|
| 294 |
+ if app.events.get_nb_events():
|
|
| 295 |
+ account, jid, event = app.events.get_first_systray_event()
|
|
| 296 |
+ if not event:
|
|
| 297 |
+ return
|
|
| 298 |
+ app.interface.handle_event(account, jid, event.type_)
|
| ... | ... | @@ -2755,19 +2755,10 @@ class SynchroniseSelectContactsDialog: |
| 2755 | 2755 |
|
| 2756 | 2756 |
class StartChatDialog(Gtk.ApplicationWindow):
|
| 2757 | 2757 |
def __init__(self):
|
| 2758 |
- # Must be before ApplicationWindow.__init__
|
|
| 2759 |
- # or we get our own window
|
|
| 2760 |
- active_window = app.app.get_active_window()
|
|
| 2761 |
- |
|
| 2762 | 2758 |
Gtk.ApplicationWindow.__init__(self)
|
| 2763 | 2759 |
self.set_name('StartChatDialog')
|
| 2764 | 2760 |
self.set_application(app.app)
|
| 2765 |
- mode = app.config.get('one_message_window') != 'always_with_roster'
|
|
| 2766 |
- if active_window == app.interface.roster.window and mode:
|
|
| 2767 |
- self.set_position(Gtk.WindowPosition.CENTER)
|
|
| 2768 |
- else:
|
|
| 2769 |
- self.set_transient_for(active_window)
|
|
| 2770 |
- self.set_type_hint(Gdk.WindowTypeHint.DIALOG)
|
|
| 2761 |
+ self.set_position(Gtk.WindowPosition.CENTER)
|
|
| 2771 | 2762 |
self.set_show_menubar(False)
|
| 2772 | 2763 |
self.set_title(_('Start new Conversation'))
|
| 2773 | 2764 |
self.set_default_size(-1, 400)
|
| ... | ... | @@ -98,7 +98,15 @@ class GajimApplication(Gtk.Application): |
| 98 | 98 |
_('Show all warnings'))
|
| 99 | 99 |
self.add_main_option('ipython', ord('i'), GLib.OptionFlags.NONE,
|
| 100 | 100 |
GLib.OptionArg.NONE,
|
| 101 |
- _('open ipython shell'))
|
|
| 101 |
+ _('Open IPython shell'))
|
|
| 102 |
+ self.add_main_option('show-next-pending-event', 0, GLib.OptionFlags.NONE,
|
|
| 103 |
+ GLib.OptionArg.NONE,
|
|
| 104 |
+ _('Pops up a window with the next pending event'))
|
|
| 105 |
+ self.add_main_option('start-chat', 0, GLib.OptionFlags.NONE,
|
|
| 106 |
+ GLib.OptionArg.NONE,
|
|
| 107 |
+ _('Start a new chat'))
|
|
| 108 |
+ |
|
| 109 |
+ self.add_main_option_entries(self._get_remaining_entry())
|
|
| 102 | 110 |
|
| 103 | 111 |
self.connect('handle-local-options', self._handle_local_options)
|
| 104 | 112 |
self.connect('command-line', self._handle_remote_options)
|
| ... | ... | @@ -114,6 +122,17 @@ class GajimApplication(Gtk.Application): |
| 114 | 122 |
if GLib.get_application_name() != 'Gajim':
|
| 115 | 123 |
GLib.set_application_name('Gajim')
|
| 116 | 124 |
|
| 125 |
+ @staticmethod
|
|
| 126 |
+ def _get_remaining_entry():
|
|
| 127 |
+ option = GLib.OptionEntry()
|
|
| 128 |
+ option.arg = GLib.OptionArg.STRING_ARRAY
|
|
| 129 |
+ option.arg_data = None
|
|
| 130 |
+ option.arg_description = ('[URI …]')
|
|
| 131 |
+ option.flags = GLib.OptionFlags.NONE
|
|
| 132 |
+ option.long_name = GLib.OPTION_REMAINING
|
|
| 133 |
+ option.short_name = 0
|
|
| 134 |
+ return [option]
|
|
| 135 |
+ |
|
| 117 | 136 |
def _startup(self, application):
|
| 118 | 137 |
from gajim import gtkexcepthook
|
| 119 | 138 |
gtkexcepthook.init()
|
| ... | ... | @@ -301,24 +320,26 @@ class GajimApplication(Gtk.Application): |
| 301 | 320 |
# Parse all options that should be executed on a remote instance
|
| 302 | 321 |
options = command_line.get_options_dict()
|
| 303 | 322 |
|
| 304 |
- if options.contains('ipython'):
|
|
| 305 |
- self.activate_action('ipython')
|
|
| 306 |
- return 0
|
|
| 323 |
+ remote_commands = ['ipython',
|
|
| 324 |
+ 'show-next-pending-event',
|
|
| 325 |
+ 'start-chat',
|
|
| 326 |
+ ]
|
|
| 327 |
+ |
|
| 328 |
+ remaining = options.lookup_value(GLib.OPTION_REMAINING,
|
|
| 329 |
+ GLib.VariantType.new('as'))
|
|
| 330 |
+ |
|
| 331 |
+ for cmd in remote_commands:
|
|
| 332 |
+ if options.contains(cmd):
|
|
| 333 |
+ self.activate_action(cmd)
|
|
| 334 |
+ return 0
|
|
| 307 | 335 |
|
| 308 |
- uri = self._parse_uris(command_line)
|
|
| 309 |
- if uri is not None:
|
|
| 310 |
- self._open_uris(uri)
|
|
| 336 |
+ if remaining is not None:
|
|
| 337 |
+ self._open_uris(remaining.unpack())
|
|
| 311 | 338 |
return 0
|
| 312 | 339 |
|
| 313 | 340 |
self.activate()
|
| 314 | 341 |
return 0
|
| 315 | 342 |
|
| 316 |
- @staticmethod
|
|
| 317 |
- def _parse_uris(command_line):
|
|
| 318 |
- args = command_line.get_arguments()
|
|
| 319 |
- if len(args) > 1:
|
|
| 320 |
- return args[1:]
|
|
| 321 |
- |
|
| 322 | 343 |
def _handle_local_options(self, application,
|
| 323 | 344 |
options: GLib.VariantDict) -> int:
|
| 324 | 345 |
# Parse all options that have to be executed before ::startup
|
| ... | ... | @@ -425,6 +446,7 @@ class GajimApplication(Gtk.Application): |
| 425 | 446 |
('about', action.on_about),
|
| 426 | 447 |
('faq', action.on_faq),
|
| 427 | 448 |
('ipython', action.toggle_ipython),
|
| 449 |
+ ('show-next-pending-event', action.show_next_pending_event),
|
|
| 428 | 450 |
]
|
| 429 | 451 |
|
| 430 | 452 |
act = Gio.SimpleAction.new('add-contact', GLib.VariantType.new('s'))
|
| ... | ... | @@ -85,14 +85,6 @@ class GajimRemote: |
| 85 | 85 |
_('show help on command'), False)
|
| 86 | 86 |
]
|
| 87 | 87 |
],
|
| 88 |
- 'toggle_roster_appearance': [
|
|
| 89 |
- _('Shows or hides the roster window'),
|
|
| 90 |
- []
|
|
| 91 |
- ],
|
|
| 92 |
- 'show_next_pending_event': [
|
|
| 93 |
- _('Pops up a window with the next pending event'),
|
|
| 94 |
- []
|
|
| 95 |
- ],
|
|
| 96 | 88 |
'list_contacts': [
|
| 97 | 89 |
_('Lists all contacts in roster, one for each line'),
|
| 98 | 90 |
[
|
| ... | ... | @@ -257,10 +249,6 @@ class GajimRemote: |
| 257 | 249 |
_('Check if Gajim is running'),
|
| 258 | 250 |
[]
|
| 259 | 251 |
],
|
| 260 |
- 'toggle_ipython': [
|
|
| 261 |
- _('Shows or hides the ipython window'),
|
|
| 262 |
- []
|
|
| 263 |
- ],
|
|
| 264 | 252 |
|
| 265 | 253 |
}
|
| 266 | 254 |
|
| ... | ... | @@ -646,50 +646,6 @@ class SignalObject(dbus.service.Object): |
| 646 | 646 |
result.append(item)
|
| 647 | 647 |
return result
|
| 648 | 648 |
|
| 649 |
- @dbus.service.method(INTERFACE, in_signature='', out_signature='')
|
|
| 650 |
- def toggle_roster_appearance(self):
|
|
| 651 |
- """
|
|
| 652 |
- Show/hide the roster window
|
|
| 653 |
- """
|
|
| 654 |
- win = app.interface.roster.window
|
|
| 655 |
- if win.get_property('visible'):
|
|
| 656 |
- GLib.idle_add(win.hide)
|
|
| 657 |
- else:
|
|
| 658 |
- win.present()
|
|
| 659 |
- # preserve the 'steal focus preservation'
|
|
| 660 |
- if self._is_first():
|
|
| 661 |
- win.window.present()
|
|
| 662 |
- else:
|
|
| 663 |
- win.window.present_with_time(int(time()))
|
|
| 664 |
- |
|
| 665 |
- @dbus.service.method(INTERFACE, in_signature='', out_signature='')
|
|
| 666 |
- def show_roster(self):
|
|
| 667 |
- """
|
|
| 668 |
- Show the roster window
|
|
| 669 |
- """
|
|
| 670 |
- win = app.interface.roster.window
|
|
| 671 |
- win.present()
|
|
| 672 |
- # preserve the 'steal focus preservation'
|
|
| 673 |
- if self._is_first():
|
|
| 674 |
- win.window.present()
|
|
| 675 |
- else:
|
|
| 676 |
- win.window.present_with_time(int(time()))
|
|
| 677 |
- |
|
| 678 |
- @dbus.service.method(INTERFACE, in_signature='', out_signature='')
|
|
| 679 |
- def toggle_ipython(self):
|
|
| 680 |
- """
|
|
| 681 |
- Show/hide the ipython window
|
|
| 682 |
- """
|
|
| 683 |
- win = app.ipython_window
|
|
| 684 |
- if win:
|
|
| 685 |
- if win.window.is_visible():
|
|
| 686 |
- GLib.idle_add(win.hide)
|
|
| 687 |
- else:
|
|
| 688 |
- win.show_all()
|
|
| 689 |
- win.present()
|
|
| 690 |
- else:
|
|
| 691 |
- app.interface.create_ipython_window()
|
|
| 692 |
- |
|
| 693 | 649 |
@dbus.service.method(INTERFACE, in_signature='', out_signature='a{ss}')
|
| 694 | 650 |
def prefs_list(self):
|
| 695 | 651 |
prefs_dict = DBUS_DICT_SS()
|