Commit a645006b authored by Yann Leboulanger's avatar Yann Leboulanger

merge diff from trunk

parent f3f62276
CURRENT DEVELOPERS:
Yann Le Boulanger (asterix AT lagaule.org)
Yann Leboulanger (asterix AT lagaule.org)
Nikos Kouremenos (kourem AT gmail.com)
Travis Shirk (travis AT pobox.com)
Stephan Erb (steve-e AT h3c.de)
Julien Pivotto (roidelapluie AT gmail.com)
PAST DEVELOPERS:
......
This diff is collapsed.
Gajim 0.11.4 (06 December 2007)
* Fix /nick command in groupchats
* Better Metacontacts sorting
* Fix Ctrl + PageUP/Down behaviour
* Fix saving files from filetransfer under windows
Gajim 0.11.3 (17 November 2007)
* Fix bookmarks support detection
* Improve file transfer on windows
* Fix some zeroconf bugs
* Fix focus bug in chat window
* Fix nickname changement behaviour in groupchats
Gajim 0.11.2 (22 September 2007)
* Improve idle, transports support
* Enable ellipsization in roster and chatwindow
* Fixed some metacontacts problems (#2156, #2761)
* Beter support of XEP-0070 (Verifying HTTP Requests via XMPP)
* Make the same height of a banner for all chat tabs
* Fix a bug with french translation and invitations (#3043)
* Fix a bug with UTF-8 and emoticons
* Corrected many bugs with passwords and gnome-keyring
* Improve xhtml-im and pictures support
* Improve Ad-Hoc support
* And many other bufixes
Gajim 0.11.1 (18 February 2007)
* Fixes in gajim-remote and the way XMPP URI are handled
* Fix Idle under Windows
......
......@@ -48,6 +48,16 @@ MAINTAINERCLEANFILES = \
compile \
depcomp \
config.guess \
config.log \
config.sub \
config.status \
aclocal.m4 \
libtool
libtool \
po/POTFILES.in \
src/trayicon_la-eggtrayicon.loT \
m4/intltool.m4
MAINTAINERCLEANDIRS = \
autom4te.cache \
build \
dist
......@@ -16,7 +16,7 @@ Welcome to Gajim and thank you for trying out our client.
<h2>Runtime Requirements</h2>
<ul>
<li>python2.4 or higher</li>
<li>pygtk2.6 or higher</li>
<li>pygtk2.8 or higher</li>
<li>python-libglade</li>
<li>pysqlite2 (if you have python 2.5, you already have this)</li>
</ul>
......@@ -29,6 +29,7 @@ Gajim is a GTK+ app that loves GNOME. You can do 'make' so you don't require gno
<h2>Optional Runtime Requirements</h2>
<ul>
<li><a href="http://pyopenssl.sourceforge.net/">PyOpenSSL</a> (python-pyopenssl package in Debian) for <em>secure</em> SSL/TLS. Python's default SSL is insecure, so this package is highly recommended!</li>
<li>python-crypto to enable End to end encryption</li>
<li>For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi</li>
<li>dnsutils (or whatever package provides the nslookup binary) for SRV support; if you don't know what that is, you don't need it</li>
<li>gtkspell and aspell-LANG where lang is your locale eg. en, fr etc</li>
......@@ -37,6 +38,7 @@ Gajim is a GTK+ app that loves GNOME. You can do 'make' so you don't require gno
<li>notification-daemon or notify-python (and D-Bus) to get cooler popups</li>
<li>D-Bus running to have gajim-remote working</li>
<li>python-dbus bindings</li>
<li>python-sexy to have clickable URLs in chat windows</li>
</ul>
<p>
......
Introduction
------------
This is an alpha release of Gajim for OS/X using native GTK+. It is not finished
nor is it relatively stable. The native port of GTK+ is alpha and not stable
yet, though it has proven to be usable for Gajim. Having said that it is usable,
basic functionality works. See the TODO file for a list of what is and is not
working.
Installing
----------
Install the GTK+ framework into your /Library/Frameworks directory. It can be
found at http://codepunks.org/misc/gtk/osx.
Copy the Gajim.app into the /Applications directory or any other directory.
Installing language dictionaries
--------------------------------
The codepunks.org build of the GTK+ framework comes with the US English
dictionary pre-installed. If you wish to install a different dictionary download
the appropriate dictionary from here:
http://ftp.gnu.org/gnu/aspell/dict/
Then follow these instructions:
source /Library/Frameworks/GTK+.framework/Versions/Current/bin/env
tar -jxf aspell-<lang>-<version>.tbz2
cd aspell-<lang>-<version>
./configure
make
make install
Compiling Requirements
----------------------
These instructions were gathered for building a universal binary on a PPC. The
steps for building on an i386 should be essentially the same.
Requirements:
- OS/X 10.4, i386 or ppc
- Universal MacPython 2.5
http://www.pythonmac.org/packages/py25-fat/index.html
- Latest XCode (2.4.0 or greater)
- py2app
http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html
Install all of the requirements. Make sure that the universal MacPython is
installed before py2app. Then ensure that this is the first python in your
PATH.
export PATH=/Library/Frameworks/Python.framework/Versions/2.5/bin:$PATH
Then install py2app.
Compiling
---------
In the top level run the configure script. If this is source is from subversion
then run the autogen.sh script. Follow it up with a make:
./configure
or
./autogen.sh
make
Once that is done Gajim can be run from the source tree. You may also create an
app bundle suitable for use or distribution. To do that run:
python setup_osx.py build
The Gajim.app bundle is created in the dist directory. This bundle is ready
for use as is. Copy it to your /Applications directory and you're good to go.
You now have a self contained (almost, requires GTK+.framework still) universal
native build of Gajim.
Optionally to create a distribution of the Gajim app bundle do:
python setup_osx.py dist
Development
-----------
It is possible to run Gajim correctly from the app bundle but still use the
python code in the source tree. This line must be added to the _run() function
in the Gajim.app/Resources/__boot__.py file. It needs to be located just after
the sys module is imported. Font forget to fix the path to match your
environment.
sys.path = ["/Users/user/Source/gajim/src"] + sys.path
......@@ -20,7 +20,6 @@ Guillaume Morin
Gustavo J. A. M. Carneiro
Ivo Anjo
Josef Vybíral
Julien Pivotto
Juraj Michalek
Luis Peralta
Michael Scherer
......
The bits that work
------------------
-idle checking
-dbus and gajim-remote, using dbus from GTK+.framework.
-systray icon
-app bundle with universal binaries. Depends on the GTK+.framework.
-notifications through growl, internal fallback works fine as well
-spell checking
-running apps and opening files/urls
-playing sounds
-Network monitoring
-Mostly everything else except for whats below.
The bits that dont work
-----------------------
-Application start/stop/doc/DnD handling
-finish the .app bundle
- setup gajim-remote, maybe install it to /usr/local
- fix user session management
-integrate the Gajim and gajim-remote scripts with autoconf and add GTK
framework detection
-Maybe setup the pasteboard services for an OS/X alternative to the
gajim_remote
-CFBundleDocumentTypes.NSDocument
-zeroconf has a parsing problem with the MDNS result.
Native GTK bugs
----------------
-cut and paste blows up Finder and the os/x GUI server. very very nasty.
-with mutiple displays, popup menus show up on the wrong display
#!/usr/bin/env bash
AM_ARGS="--add-missing --gnu --copy"
CONF_ARGS=""
if test x`uname -s 2>/dev/null` = 'xDarwin';then
. /Library/Frameworks/GTK+.framework/Versions/Current/env
AM_ARGS="${AM_ARGS} --ignore-deps"
CONF_ARGS="${CONF_ARGS} --disable-idle --without-x"
fi
echo "[encoding: UTF-8]" > po/POTFILES.in \
&& ls -1 -U data/gajim.desktop.in.in data/glade/*.glade \
src/*py src/common/*py src/common/zeroconf/*.py >> \
......@@ -8,11 +16,11 @@
echo "See README.html for build requirements."
exit 1
fi
set -x
intltoolize --force --automake \
&& aclocal -I ./m4 \
&& libtoolize --copy --force --automake \
&& autoheader \
&& autoconf \
&& automake --add-missing --gnu --copy \
&& ./configure $@
&& automake ${AM_ARGS} \
&& ./configure ${CONF_ARGS} $@
AC_INIT([Gajim - A Jabber Instant Messager],
[0.11.1.5],[http://trac.gajim.org/],[gajim])
[0.11.4.0-svn],[http://trac.gajim.org/],[gajim])
AC_PREREQ([2.59])
AM_INIT_AUTOMAKE([1.8])
AC_CONFIG_HEADER(config.h)
AC_CONFIG_MACRO_DIR([m4])
AM_MAINTAINER_MODE
dnl Make Objective-C work with automake
AM_CONDITIONAL([am__fastdepOBJC], false)
IT_PROG_INTLTOOL([0.35.0])
PKG_PROG_PKG_CONFIG([0.19])
......@@ -33,7 +36,7 @@ AM_NLS
dnl ****
dnl pygtk and gtk+
dnl ****
PKG_CHECK_MODULES([PYGTK], [gtk+-2.0 >= 2.6.0 pygtk-2.0 >= 2.6.0])
PKG_CHECK_MODULES([PYGTK], [gtk+-2.0 >= 2.8.0 pygtk-2.0 >= 2.8.0])
AC_SUBST(PYGTK_CFLAGS)
AC_SUBST(PYGTK_LIBS)
PYGTK_DEFS=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
......@@ -128,6 +131,75 @@ AC_ARG_ENABLE(trayicon,
test "x$enable_trayicon" = "xyes" && have_trayicon=true || have_trayicon=false
AM_CONDITIONAL(BUILD_TRAYICON, $have_trayicon)
dnl ****
dnl Cocoa
dnl ****
AC_ARG_ENABLE([cocoa],
[ --disable-cocoa build cocoa integration [default auto]],
enable_cocoa=$enableval, enable_cocoa=yes)
if test "x$enable_cocoa" = "xyes";then
dnl There is no pkgconfig for cocoa; lets do a header check
temp_save_cflags="$CFLAGS"
CFLAGS="$CFLAGS -ObjC"
AC_CHECK_HEADER(Cocoa/Cocoa.h, [have_cocoa=true], [have_cocoa=false])
AC_CHECK_HEADER(AppKit/AppKit.h, [have_appkit=true], [have_appkit=false])
CFLAGS="$temp_save_cflags"
if test "x$have_cocoa" = "xtrue";then
COCOA_LIBS="$COCOA_LIBS -Xlinker -framework -Xlinker Cocoa"
fi
if test "x$have_appkit" = "xtrue";then
COCOA_LIBS="$COCOA_LIBS -Xlinker -framework -Xlinker AppKit"
fi
if test "x$COCOA_LIBS" != "x";then
AC_SUBST(COCOA_LIBS)
true
fi
fi
AM_CONDITIONAL(BUILD_COCOA, $have_cocoa)
dnl ****
dnl Carbon
dnl ****
AC_ARG_ENABLE([carbon],
[ --disable-carbon build with carbon [default auto]],
enable_carbon=$enableval, enable_carbon=yes)
if test "x$enable_carbon" = "xyes";then
dnl There is no pkgconfig for carbon; lets do a header check
AC_CHECK_HEADER(Carbon/Carbon.h, [have_carbon=true], [have_carbon=false])
AC_CHECK_HEADER(IOKit/IOKitLib.h, [have_iokit=true], [have_iokit=false])
if test "x$have_carbon" = "xtrue";then
CARBON_LIBS="$CARBON_LIBS -Xlinker -framework -Xlinker Carbon"
fi
if test "x$have_iokit" = "xtrue";then
CARBON_LIBS="$CARBON_LIBS -Xlinker -framework -Xlinker IOKit"
fi
if test "x$CARBON_LIBS" != "x";then
AC_SUBST(CARBON_LIBS)
have_idle_osx=true
dnl Disable X11 idle
have_idle=false
AM_CONDITIONAL(BUILD_IDLE, false)
dnl Disable custom trayicon
have_trayicon=gtk+
AM_CONDITIONAL(BUILD_TRAYICON, false)
dnl Hack to work around failure in gettext package detection on OS/X
if test "x$GMSGFMT" = "x";then
AC_SUBST(GMSGFMT, msgfmt)
AC_SUBST(MSGFMT, msgfmt)
AC_SUBST(XGETTEXT, xgettext)
fi
else
have_carbon=false
have_idle_osx=false
fi
fi
AM_CONDITIONAL(BUILD_IDLE_OSX, $have_carbon)
AM_CONDITIONAL(BUILD_CARBON, $have_carbon)
ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}"
AC_SUBST(ACLOCAL_AMFLAGS)
......@@ -159,6 +231,9 @@ AC_CONFIG_FILES([
data/defs.py
src/Makefile
src/common/Makefile
src/osx/Makefile
src/osx/growl/Makefile
src/osx/syncmenu/Makefile
scripts/gajim
scripts/gajim-remote
po/Makefile.in
......@@ -171,4 +246,6 @@ echo "
idle module ...... ${have_idle}
remote control ... ${have_remote}
trayicon ......... ${have_trayicon}
idle module OSX .. ${have_idle_osx}
cocoa ............ ${have_cocoa}
*****************************"
......@@ -12,7 +12,7 @@ soundsdir = $(pkgdatadir)/data/sounds
sounds_DATA = $(srcdir)/sounds/*.wav
otherdir = $(pkgdatadir)/data/other
other_DATA = other/servers.xml
other_DATA = other/servers.xml other/cacerts.pem
man_MANS = gajim.1 gajim-remote.1
......
# coding=utf-8
emoticons = {
':-[': 'bat.gif',
':[': 'bat.gif',
......
# coding=utf-8
emoticons = {
':-)': 'smile.png',
':)': 'smile.png',
......@@ -54,6 +55,9 @@ emoticons = {
#
':-[': 'bat.png',
':[': 'bat.png',
#
'>:3': 'lion.png',
':3': 'lion.png',
#
#MSN ones
'(@)': 'pussy.png',
......
# coding=utf-8
emoticons = {
':-)': 'smile.png',
':)': 'smile.png',
......@@ -54,6 +55,9 @@ emoticons = {
#
':-[': 'bat.png',
':[': 'bat.png',
#
'>:3': 'lion.png',
':3': 'lion.png',
#
#MSN ones
'(@)': 'pussy.png',
......
.\" 20050818
.TH "Gajim-remote" "1" "August 18, 2005" "Gajim dev team" ""
.SH "NAME"
Gajim-remote
Gajim-remote \- tool to communicate with a running instance of Gajim
.SH "SYNOPSIS"
.B gajim-remote [help] [toggle_roster_appearance] [show_next_unread] [list_contacts] [list_accounts] [change_status] [open_chat] [send_message] [send_file] [contact_info] [account_info] [send_file] [prefs_list] [prefs_put] [prefs_del] [prefs_store] [remove_contact] [add_contact] [get_status] [get_status_message] [get_unread_msgs_number] [start_chat]
.SH "DESCRIPTION"
......
[Desktop Entry]
Categories=Network;InstantMessaging;Application;GTK;GNOME;
Categories=Network;InstantMessaging;GTK;GNOME;
_Name=Gajim Instant Messenger
_GenericName=Jabber IM Client
_Comment=A GTK+ Jabber client
Version=@VERSION@
Encoding=UTF-8
Version=1.0
Exec=gajim
Icon=gajim.png
Icon=gajim
StartupNotify=true
StartupWMClass=Gajim
Terminal=false
......
......@@ -32,21 +32,31 @@
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="seperator">
<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="open_gmail_inbox_menuitem">
<widget class="GtkImageMenuItem" id="start_chat_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Open Gmail Inbox</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Start Chat...</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image7">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-jump-to</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="join_group_chat_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Group Chat</property>
<property name="label" translatable="yes">Join _Group Chat...</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image1236">
......@@ -57,6 +67,25 @@
</child>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="seperator">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="add_contact_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Add Contact...</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image1238">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="service_discovery_menuitem">
<property name="visible">True</property>
......@@ -74,7 +103,7 @@
<child>
<widget class="GtkImageMenuItem" id="execute_command_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Execute Command</property>
<property name="label" translatable="yes">_Execute Command...</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image1246">
......@@ -86,28 +115,21 @@
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="seperator">
<widget class="GtkMenuItem" id="open_gmail_inbox_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Open Gmail Inbox</property>
<property name="use_underline">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="add_contact_menuitem">
<widget class="GtkSeparatorMenuItem" id="seperator">
<property name="visible">True</property>
<property name="label" translatable="yes">_Add Contact</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image1238">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="edit_account_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Modify Account...</property>
<property name="label" translatable="yes">_Modify Account</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image1240">
......
......@@ -35,7 +35,6 @@ to the Jabber network.</property>
<child>
<widget class="GtkFrame" id="frame33">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkAlignment" id="alignment68">
......@@ -51,7 +50,7 @@ to the Jabber network.</property>
<widget class="GtkRadioButton" id="use_existing_account_radiobutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">I already have an account I want to use</property>
<property name="label" translatable="yes">I already have an account I want to _use</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
......@@ -99,9 +98,6 @@ to the Jabber network.</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label259">
......@@ -109,7 +105,6 @@ to the Jabber network.</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
......@@ -294,7 +289,6 @@ to the Jabber network.</property>
</widget>
<packing>
<property name="position">1</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
......@@ -304,7 +298,6 @@ to the Jabber network.</property>
<packing>
<property name="type">tab</property>
<property name="position">1</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
......@@ -526,7 +519,6 @@ to the Jabber network.</property>
</widget>
<packing>
<property name="position">2</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
......@@ -536,7 +528,69 @@ to the Jabber network.</property>
<packing>
<property name="type">tab</property>
<property name="position">2</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="ssl_vbox">
<property name="visible">True</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-dialog-warning</property>
<property name="icon_size">5</property>
</widget>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="ssl_label">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="ssl_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Add this certificate to the list of trusted certificates.
SHA1 fingerprint of the certificate:
</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="position">3</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label482">
<property name="visible">True</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="position">3</property>
<property name="tab_fill">False</property>
</packing>
</child>
......@@ -548,8 +602,7 @@ to the Jabber network.</property>
</child>
</widget>
<packing>
<property name="position">3</property>