From: <the...@us...> - 2006-04-12 04:00:30
|
Revision: 16030 Author: thekingant Date: 2006-04-11 21:00:19 -0700 (Tue, 11 Apr 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16030&view=rev Log Message: ----------- Change CVS to SVN in a bunch of places, and use "2.0.0dev" as the version string. Modified Paths: -------------- trunk/HACKING trunk/README trunk/VERSION trunk/config.h.mingw trunk/configure.ac trunk/gaim.spec.in Added Paths: ----------- trunk/README.SVN Removed Paths: ------------- trunk/README.CVS Modified: trunk/HACKING =================================================================== --- trunk/HACKING 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/HACKING 2006-04-12 04:00:19 UTC (rev 16030) @@ -28,26 +28,24 @@ you don't know GTK+ you should go learn that first. If you're going to hack gaim, PLEASE, PLEASE PLEASE PLEASE send patches -against the absolute latest CVS. I get really annoyed when I get patches +against the absolute latest SVN. I get really annoyed when I get patches against the last released version, especially since I don't usually have a copy of it on my computer, and gaim tends to change a lot between -versions. (I sometimes get annoyed when they're against CVS from 3 days +versions. (I sometimes get annoyed when they're against SVN from 3 days ago, but can't complain because it's usually my fault that I haven't -looked at the patch yet.) To get gaim from CVS (if you haven't already), +looked at the patch yet.) To get gaim from SVN (if you haven't already), run the following commands: -$ export CVSROOT=:pserver:ano...@cv...:/cvsroot/gaim -$ cvs login (hit enter as the password) -$ cvs co gaim (you'll see it getting all of the files) +$ svn co https://svn.sourceforge.net/svnroot/gaim/trunk gaim $ cd gaim $ ./autogen.sh You'll now have your normal gaim tree with ./configure and all (which ./autogen.sh takes the liberty of running for you). (If you want to make -your life really simple, learn how CVS works. CVS is your friend.) To make +your life really simple, learn how SVN works. SVN is your friend.) To make a patch, just edit the files right there in that tree (don't bother with two trees, or even two copies of the same file). Then when you're ready to -make your patch, simply run 'cvs diff -u >my.patch' and post it on +make your patch, simply run 'svn diff > my.patch' and post it on sf.net/projects/gaim in the patches section. Some Documentation is available on the Gaim api if you run the command Modified: trunk/README =================================================================== --- trunk/README 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/README 2006-04-12 04:00:19 UTC (rev 16030) @@ -73,7 +73,7 @@ If you come across a bug, please report it to http://gaim.sf.net/bug.php. -See README.CVS for information on the bleeding edge CVS version of Gaim. +See README.SVN for information on the bleeding edge SVN version of Gaim. You probably shouldn't use it, as it may eat your children, as well as your settings. Deleted: trunk/README.CVS =================================================================== --- trunk/README.CVS 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/README.CVS 2006-04-12 04:00:19 UTC (rev 16030) @@ -1,41 +0,0 @@ -If you plan to use gaim CVS, PLEASE read this message in its entirety! - -Gaim is a fast-moving project with a somewhat regular release schedule. -Due to the rate of gaim development, CVS undergoes frequent bursts of -massive changes, often leaving behind brokenness and partial -functionality while the responsible developers rewrite some portion of -code or seek to add new features. - -What this all boils down to is that CVS _WILL_ sometimes be broken. -Because of this, we ask that users who are not interested in -personally tracking down bugs and fixing them (without a lot of -assistance from the developers!) avoid CVS and use releases. Since -releases will be made often, this should not prevent anyone from using -the newest, shiniest features -- but it will prevent users from having -to deal with ugly development bugs that we already know about but -haven't gotten around to fixing. - -If you are interested in hacking on gaim, please read README and -HACKING, and take note of the issues in PROGRAMMING_NOTES. (Note that -they may be somewhat out of date at times.) Win32 developers, please -read README.mingw. - -By far the best documentation, however, is the documented code. Not -all parts of gaim have yet been documented, but the major subsystems -are falling fast. If you have doxygen, you can use the Doxyfile in -the toplevel directory to generate pretty documentation. Otherwise -(or even if you do!), the header files for each subsystem contain -documentation for the functions they contain. For instance, -conversation.h contains documentation for the entire -gaim_conversation_* API, and account.h contains documentation for the -gaim_account_* API. - -If you have questions, please feel free to contact the gaim developers -by email at gai...@li..., on IRC at -irc.freenode.net in #gaim, or via the sourceforge forums at -http://www.sourceforge.net/projects/gaim. Please do as much homework -as you can before contacting us; the more you know about your -question, the faster and more effectively we can help you! - -Send patches to gai...@li... or post them in the -Sourceforge forums at http://www.sourceforge.net/projects/gaim. Copied: trunk/README.SVN (from rev 16025, trunk/README.CVS) =================================================================== --- trunk/README.SVN (rev 0) +++ trunk/README.SVN 2006-04-12 04:00:19 UTC (rev 16030) @@ -0,0 +1,41 @@ +If you plan to use gaim SVN, PLEASE read this message in its entirety! + +Gaim is a fast-moving project with a somewhat regular release schedule. +Due to the rate of gaim development, SVN undergoes frequent bursts of +massive changes, often leaving behind brokenness and partial +functionality while the responsible developers rewrite some portion of +code or seek to add new features. + +What this all boils down to is that SVN _WILL_ sometimes be broken. +Because of this, we ask that users who are not interested in +personally tracking down bugs and fixing them (without a lot of +assistance from the developers!) avoid SVN and use releases. Since +releases will be made often, this should not prevent anyone from using +the newest, shiniest features -- but it will prevent users from having +to deal with ugly development bugs that we already know about but +haven't gotten around to fixing. + +If you are interested in hacking on gaim, please read README and +HACKING, and take note of the issues in PROGRAMMING_NOTES. (Note that +they may be somewhat out of date at times.) Win32 developers, please +read README.mingw. + +By far the best documentation, however, is the documented code. Not +all parts of gaim have yet been documented, but the major subsystems +are falling fast. If you have doxygen, you can use the Doxyfile in +the toplevel directory to generate pretty documentation. Otherwise +(or even if you do!), the header files for each subsystem contain +documentation for the functions they contain. For instance, +conversation.h contains documentation for the entire +gaim_conversation_* API, and account.h contains documentation for the +gaim_account_* API. + +If you have questions, please feel free to contact the gaim developers +by email at gai...@li..., on IRC at +irc.freenode.net in #gaim, or via the sourceforge forums at +http://www.sourceforge.net/projects/gaim. Please do as much homework +as you can before contacting us; the more you know about your +question, the faster and more effectively we can help you! + +Send patches to gai...@li... or post them in the +Sourceforge forums at http://www.sourceforge.net/projects/gaim. Property changes on: trunk/README.SVN ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Modified: trunk/VERSION =================================================================== --- trunk/VERSION 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/VERSION 2006-04-12 04:00:19 UTC (rev 16030) @@ -1 +1 @@ -2.0.0cvs +2.0.0dev Modified: trunk/config.h.mingw =================================================================== --- trunk/config.h.mingw 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/config.h.mingw 2006-04-12 04:00:19 UTC (rev 16030) @@ -529,13 +529,13 @@ #define PACKAGE_NAME "gaim" /* Define to the full name and version of this package. */ -/* #define PACKAGE_STRING "gaim 2.0.0cvs" */ +/* #define PACKAGE_STRING "gaim 2.0.0dev" */ /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gaim" /* Define to the version of this package. */ -/* #define PACKAGE_VERSION "2.0.0cvs" */ +/* #define PACKAGE_VERSION "2.0.0dev" */ /* Define if <inttypes.h> exists and defines unusable PRI* macros. */ /* #undef PRI_MACROS_BROKEN */ @@ -579,7 +579,7 @@ /* #define USE_SM 1 */ /* Version number of package */ -/* #define VERSION "2.0.0cvs" */ +/* #define VERSION "2.0.0dev" */ /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/configure.ac 2006-04-12 04:00:19 UTC (rev 16030) @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([gaim], [2.0.0cvs], [gai...@li...]) +AC_INIT([gaim], [2.0.0dev], [gai...@li...]) AC_CANONICAL_SYSTEM AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) @@ -645,8 +645,9 @@ dnl the build process to generate the code, not for running gaim. dnl This autogenerated code is system-independent, so in principle we dnl can generate all of it before shipping. But I thought adding -dnl auto-generated stuff to the CVS is inelegant. Alternatively, -dnl these python scripts could be rewritten in C (brrrr ...). +dnl auto-generated stuff to the repository is inelegant. +dnl Alternatively, these python scripts could be rewritten +dnl in C (brrrr ...). AC_ARG_WITH([python], AC_HELP_STRING([--with-python], Modified: trunk/gaim.spec.in =================================================================== --- trunk/gaim.spec.in 2006-04-12 03:40:16 UTC (rev 16029) +++ trunk/gaim.spec.in 2006-04-12 04:00:19 UTC (rev 16030) @@ -9,7 +9,7 @@ %define beta 3 %if 0%{?beta} -%define gaimver %(echo "@VERSION@"|sed -e 's/cvs//; s/beta.*//') +%define gaimver %(echo "@VERSION@"|sed -e 's/svn//; s/beta.*//') %else %define gaimver @VERSION@ %endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2006-04-16 18:29:03
|
Revision: 16041 Author: marv_sf Date: 2006-04-16 11:28:53 -0700 (Sun, 16 Apr 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16041&view=rev Log Message: ----------- Ike Ginerich fixed gaim_markup_slice(). Looks like the way we were using it just happened to work, which explains how I was sure I tested this and it worked and yet it was broken. Go figure. Modified Paths: -------------- trunk/COPYRIGHT trunk/src/util.c Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-04-16 15:35:09 UTC (rev 16040) +++ trunk/COPYRIGHT 2006-04-16 18:28:53 UTC (rev 16041) @@ -104,6 +104,7 @@ François Gagné Evgueni V. Gavrilov Ignacy Gawedzki +Ike Gingerich Gustavo Giráldez Richard Gobeille Michael Golden Modified: trunk/src/util.c =================================================================== --- trunk/src/util.c 2006-04-16 15:35:09 UTC (rev 16040) +++ trunk/src/util.c 2006-04-16 18:28:53 UTC (rev 16041) @@ -2121,16 +2121,7 @@ /* z += 0; */ } - if (z == x && !appended) { - GList *l = q->tail; - - while (l) { - tag = l->data; - g_string_append(ret, tag); - l = l->prev; - } - appended = TRUE; - } else if (z >= x) { + if (z >= x) { g_string_append_len(ret, str, end - str + 1); } @@ -2152,6 +2143,17 @@ z++; str = end; } else { + if (z == x && z > 0 && !appended) { + GList *l = q->tail; + + while (l) { + tag = l->data; + g_string_append(ret, tag); + l = l->prev; + } + appended = TRUE; + } + if (z >= x) g_string_append_unichar(ret, c); z++; @@ -2184,7 +2186,7 @@ if (tag[i] == '>' || tag[i] == ' ' || tag[i] == '/') break; - return g_strndup(tag, i); + return g_strndup(tag+1, i-1); } /************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-04-24 19:57:33
|
Revision: 16087 Author: rlaager Date: 2006-04-24 12:57:23 -0700 (Mon, 24 Apr 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16087&view=rev Log Message: ----------- SF Patch #1475008 from Wan Hing Wah "fix crash when search in buddylist containing non-ascii text" "the len parameter of pango_get_log_attrs should be in length of bytes instead of length of utf8 characters. This cause crash when the buddly list name contain international character where strlen(normalized) != g_utf8_strlen(normalized). reproducable on gaim svn trunk" Modified Paths: -------------- trunk/COPYRIGHT trunk/src/gtkblist.c Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-04-23 22:05:14 UTC (rev 16086) +++ trunk/COPYRIGHT 2006-04-24 19:57:23 UTC (rev 16087) @@ -294,6 +294,7 @@ David Vermeille Sid Vicious Bjoern Voigt +Wan Hing Wah Philip Walford Nathan Walp Eric Warmenhoven Modified: trunk/src/gtkblist.c =================================================================== --- trunk/src/gtkblist.c 2006-04-23 22:05:14 UTC (rev 16086) +++ trunk/src/gtkblist.c 2006-04-24 19:57:23 UTC (rev 16087) @@ -3428,7 +3428,7 @@ len = g_utf8_strlen(normalized, -1); log_attrs = g_new(PangoLogAttr, len + 1); - pango_get_log_attrs(normalized, len, -1, NULL, log_attrs, len + 1); + pango_get_log_attrs(normalized, strlen(normalized), -1, NULL, log_attrs, len + 1); word = normalized; result = TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-05-02 22:24:54
|
Revision: 16127 Author: seanegan Date: 2006-05-02 15:24:46 -0700 (Tue, 02 May 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16127&view=rev Log Message: ----------- Use Gstreamer for IM sounds, kill ao/audiofile Modified Paths: -------------- trunk/configure.ac trunk/src/Makefile.am trunk/src/gtkdialogs.c trunk/src/gtkprefs.c trunk/src/gtksound.c Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-02 20:07:55 UTC (rev 16126) +++ trunk/configure.ac 2006-05-02 22:24:46 UTC (rev 16127) @@ -159,6 +159,17 @@ ] ) +dnl ####################################################################### +dnl # GStreamer +dnl ####################################################################### +enable_gst=yes +PKG_CHECK_MODULES(GSTREAMER, gstreamer-0.10, ,enable_gst=no) +AC_SUBST(GSTREAMER_CFLAGS) +AC_SUBST(GSTREAMER_LIBS) +AC_ARG_ENABLE(gstreamer,[ --disable-gstreamer compile with GStreamer audio support],enable_gst=no) +if test "x$enable_gst" = "xyes"; then + AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for making sounds]) +fi dnl ####################################################################### dnl # Check for Meanwhile headers (for Sametime) @@ -468,7 +479,6 @@ AM_CONDITIONAL(DYNAMIC_YAHOO, test "x$dynamic_yahoo" = "xyes") AM_CONDITIONAL(DYNAMIC_ZEPHYR, test "x$dynamic_zephyr" = "xyes") -AC_ARG_ENABLE(audio, [ --disable-audio compile without libao/libaudiofile for sound playing],,enable_audio=yes) AC_ARG_ENABLE(mono, [ --enable-mono compile with Mono runtime support],,enable_mono=no) AC_ARG_ENABLE(plugins, [ --disable-plugins compile without plugin support],,enable_plugins=yes) AC_ARG_ENABLE(perl, [ --disable-perl compile without perl scripting],,enable_perl=yes) @@ -1530,23 +1540,6 @@ fi fi -if test "$enable_audio" = yes ; then - GAIM_PATH_AO(found_ao_lib=true) - - AM_PATH_AUDIOFILE([0.2.0], found_af_lib=true) - - if test "$found_ao_lib" = "true" -a "$found_af_lib" = "true"; then - SOUND_LIBS="$SOUND_LIBS $AO_LIBS $AUDIOFILE_LIBS" - AC_SUBST(SOUND_LIBS) - AC_DEFINE(USE_AO, 1, [Define if we're using libao and libaudiofile for sound playing]) - enable_audio=yes - else - enable_audio=no - fi -else - enable_audio=no -fi - if test "$ac_cv_cygwin" = yes ; then LDADD="$LDADD -static" AC_DEFINE(DEBUG, 1, [Define if debugging is enabled.]) @@ -1767,12 +1760,12 @@ echo UI Library.................... : GTK+ 2.x echo SSL Library/Libraries......... : $msg_ssl echo +echo Build with GStreamer support.. : $enable_gst echo Build with Plugin support..... : $enable_plugins echo Build with Mono support....... : $enable_mono echo Build with Perl support....... : $enable_perl echo Build with Tcl support........ : $enable_tcl echo Build with Tk support......... : $enable_tk -echo Build with Audio support...... : $enable_audio echo Build with GtkSpell support... : $enable_gtkspell echo Build with DBUS support....... : $enable_dbus if test x$enable_dbus = xyes ; then Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2006-05-02 20:07:55 UTC (rev 16126) +++ trunk/src/Makefile.am 2006-05-02 22:24:46 UTC (rev 16127) @@ -336,7 +336,7 @@ @LIBOBJS@ \ $(GTK_LIBS) \ $(DBUS_LIBS) \ - $(SOUND_LIBS) \ + $(GSTREAMER_LIBS) \ $(STATIC_LINK_LIBS) \ $(XSS_LIBS) \ $(SM_LIBS) \ @@ -351,8 +351,7 @@ -DLOCALEDIR=\"$(datadir)/locale\" \ -DSYSCONFDIR=\"$(sysconfdir)\" \ -I$(top_srcdir)/plugins \ - $(AUDIOFILE_CFLAGS) \ - $(AO_CFLAGS) \ + $(GSTREAMER_CFLAGS) \ $(DEBUG_CFLAGS) \ $(GTK_CFLAGS) \ $(DBUS_CFLAGS) \ Modified: trunk/src/gtkdialogs.c =================================================================== --- trunk/src/gtkdialogs.c 2006-05-02 20:07:55 UTC (rev 16126) +++ trunk/src/gtkdialogs.c 2006-05-02 22:24:46 UTC (rev 16127) @@ -456,10 +456,10 @@ #endif #ifndef _WIN32 -#ifdef USE_AO - g_string_append(str, " <b>libao:</b> Enabled<br/>"); +#ifdef USE_GSTREAMER + g_string_append(str, " <b>gstreamer:</b> Enabled<br/>"); #else - g_string_append(str, " <b>libao:</b> Disabled<br/>"); + g_string_append(str, " <b>gstreamer:</b> Disabled<br/>"); #endif #endif Modified: trunk/src/gtkprefs.c =================================================================== --- trunk/src/gtkprefs.c 2006-05-02 20:07:55 UTC (rev 16126) +++ trunk/src/gtkprefs.c 2006-05-02 22:24:46 UTC (rev 16127) @@ -1354,7 +1354,7 @@ gtk_widget_set_sensitive(vbox, strcmp(method, "none")); } -#ifdef USE_AO +#ifdef USE_GSTREAMER static void sound_changed3_cb(const char *name, GaimPrefType type, gconstpointer value, gpointer data) @@ -1368,7 +1368,7 @@ !strcmp(method, "esd") || !strcmp(method, "nas")); } -#endif /* USE_AO */ +#endif /* USE_GSTREAMER */ #endif /* !_WIN32 */ @@ -1470,7 +1470,7 @@ G_CALLBACK(sound_chosen_cb), NULL, GINT_TO_POINTER(sound_row_sel)); } -#ifdef USE_AO +#ifdef USE_GSTREAMER static gchar* prefs_sound_volume_format(GtkScale *scale, gdouble val) { if(val < 15) { @@ -1553,7 +1553,7 @@ dd = gaim_gtk_prefs_dropdown(vbox, _("_Method:"), GAIM_PREF_STRING, "/gaim/gtk/sound/method", _("Console beep"), "beep", -#ifdef USE_AO +#ifdef USE_GSTREAMER _("Automatic"), "automatic", "Arts", "arts", "ESD", "esd", @@ -1600,7 +1600,7 @@ gaim_gtk_prefs_checkbox(_("_Sounds while away"), "/core/sound/while_away", vbox); -#ifdef USE_AO +#ifdef USE_GSTREAMER hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); Modified: trunk/src/gtksound.c =================================================================== --- trunk/src/gtksound.c 2006-05-02 20:07:55 UTC (rev 16126) +++ trunk/src/gtksound.c 2006-05-02 22:24:46 UTC (rev 16127) @@ -31,10 +31,9 @@ #include <mmsystem.h> #endif -#ifdef USE_AO -# include <ao/ao.h> -# include <audiofile.h> -#endif /* USE_AO */ +#ifdef USE_GSTREAMER +# include <gst/gst.h> +#endif /* USE_GSTREAMER */ #include "debug.h" #include "notify.h" @@ -55,7 +54,6 @@ static guint mute_login_sounds_timeout = 0; static gboolean mute_login_sounds = FALSE; -static gboolean sound_initialized = FALSE; static struct gaim_sound_event sounds[GAIM_NUM_SOUNDS] = { {N_("Buddy logs in"), "login", "login.wav"}, @@ -72,10 +70,6 @@ {N_("Someone says your screen name in chat"), "nick_said", "alert.wav"} }; -#ifdef USE_AO -static int ao_driver = -1; -#endif /* USE_AO */ - static gboolean unmute_login_sounds_cb(gpointer data) { @@ -235,35 +229,6 @@ mute_login_sounds_timeout = gaim_timeout_add(10000, unmute_login_sounds_cb, NULL); } -static void -_pref_sound_method_changed(const char *name, GaimPrefType type, - gconstpointer val, gpointer data) -{ - if(type != GAIM_PREF_STRING || strcmp(name, "/gaim/gtk/sound/method")) - return; - - sound_initialized = TRUE; - -#ifdef USE_AO - ao_driver = -1; - - if(!strcmp(val, "esd")) - ao_driver = ao_driver_id("esd"); - else if(!strcmp(val, "arts")) - ao_driver = ao_driver_id("arts"); - else if(!strcmp(val, "nas")) - ao_driver = ao_driver_id("nas"); - else if(!strcmp(val, "automatic")) - ao_driver = ao_default_driver_id(); - - if(ao_driver != -1) { - ao_info *info = ao_driver_info(ao_driver); - gaim_debug_info("sound", - "Sound output driver loaded: %s\n", info->name); - } -#endif /* USE_AO */ -} - const char * gaim_gtk_sound_get_event_option(GaimSoundEventID event) { @@ -332,14 +297,11 @@ gaim_prefs_add_string("/gaim/gtk/sound/method", "automatic"); gaim_prefs_add_int("/gaim/gtk/sound/volume", 50); -#ifdef USE_AO +#ifdef USE_GSTREAMER gaim_debug_info("sound", "Initializing sound output drivers.\n"); - ao_initialize(); -#endif /* USE_AO */ + gst_init(NULL, NULL); +#endif /* USE_GSTREAMER */ - gaim_prefs_connect_callback(gaim_gtk_sound_get_handle(), "/gaim/gtk/sound/method", - _pref_sound_method_changed, NULL); - gaim_signal_connect(blist_handle, "buddy-signed-on", gtk_sound_handle, GAIM_CALLBACK(buddy_state_cb), GINT_TO_POINTER(GAIM_SOUND_BUDDY_ARRIVE)); @@ -369,15 +331,14 @@ static void gaim_gtk_sound_uninit(void) { -#ifdef USE_AO - ao_shutdown(); +#ifdef USE_GSTREAMER + gst_deinit(); #endif - sound_initialized = FALSE; gaim_signals_disconnect_by_handle(gaim_gtk_sound_get_handle()); } -#ifdef USE_AO +#ifdef USE_GSTREAMER static gboolean expire_old_child(gpointer data) { @@ -395,80 +356,47 @@ return FALSE; /* do not run again */ } -/* Uncomment the following line to enable debugging of clipping in the scaling. */ -/* #define DEBUG_CLIPPING */ - -static void -scale_pcm_data(char *data, int nframes, int bits, int channels, - double intercept, double minclip, double maxclip, - float scale) +static gboolean +bus_call (GstBus *bus, + GstMessage *msg, + gpointer data) { - int i; - float v; - gint16 *data16 = (gint16*)data; - gint32 *data32 = (gint32*)data; - gint64 *data64 = (gint64*)data; + GstElement *play = data; + GError *err; - switch(bits) { - case 16: - for(i = 0; i < nframes * channels; i++) { - v = ((data16[i] - intercept) * scale) + intercept; -#ifdef DEBUG_CLIPPING - if (v > maxclip) - printf("Clipping detected!\n"); - else if (v < minclip) - printf("Clipping detected!\n"); -#endif - v = CLAMP(v, minclip, maxclip); - data16[i]=(gint16)v; - } - break; - case 32: - for(i = 0; i < nframes * channels; i++) { - v = ((data32[i] - intercept) * scale) + intercept; -#ifdef DEBUG_CLIPPING - if (v > maxclip) - printf("Clipping detected!\n"); - else if (v < minclip) - printf("Clipping detected!\n"); -#endif - v = CLAMP(v, minclip, maxclip); - data32[i]=(gint32)v; - } - break; - case 64: - for(i = 0; i < nframes * channels; i++) { - v = ((data64[i] - intercept) * scale) + intercept; -#ifdef DEBUG_CLIPPING - if (v > maxclip) - printf("Clipping detected!\n"); - else if (v < minclip) - printf("Clipping detected!\n"); -#endif - v = CLAMP(v, minclip, maxclip); - data64[i]=(gint64)v; - } - break; - default: - gaim_debug_warning("gtksound", "Scaling of %d bit pcm data not supported.\n", bits); - break; + switch (GST_MESSAGE_TYPE (msg)) { + case GST_MESSAGE_EOS: + gst_element_set_state(play, GST_STATE_NULL); + gst_object_unref(GST_OBJECT(play)); + break; + case GST_MESSAGE_ERROR: + gst_message_parse_error(msg, &err, NULL); + gaim_debug_error("gstreamer", err->message); + g_error_free(err); + break; + case GST_MESSAGE_WARNING: + gst_message_parse_warning(msg, &err, NULL); + gaim_debug_warning("gstreamer", err->message); + g_error_free(err); + break; + default: + break; } + return TRUE; } -#endif /* USE_AO */ +#endif static void gaim_gtk_sound_play_file(const char *filename) { const char *method; -#ifdef USE_AO - pid_t pid; - AFfilehandle file; - int volume = 50; +#ifdef USE_GSTREAMER + float volume; + char *uri; + GstElement *sink = NULL; + GstElement *play = NULL; #endif - if (!sound_initialized) - gaim_prefs_trigger_callback("/gaim/gtk/sound/method"); - if (gaim_prefs_get_bool("/gaim/gtk/sound/mute")) return; @@ -519,91 +447,37 @@ g_free(command); return; } -#ifdef USE_AO - volume = gaim_prefs_get_int("/gaim/gtk/sound/volume"); - volume = CLAMP(volume, 0, 100); - - pid = fork(); - if (pid < 0) - return; - else if (pid == 0) { - /* Child process */ - - /* calculating the scaling factor: - * scale(x) = (x+30)^2 / 6400 - * scale(0) = 0.1406 (quiet) - * scale(50) = 1.0 (no scaling, normal volume) - * scale(100) = 2.6406 (roughly maximized without clipping) - */ - float scale = ( ((float)volume + 30) * ((float)volume + 30) ) / 6400; - file = afOpenFile(filename, "rb", NULL); - if(file) { - ao_device *device; - ao_sample_format format; - int in_fmt; - int bytes_per_frame; - double slope, intercept, minclip, maxclip; - - format.rate = afGetRate(file, AF_DEFAULT_TRACK); - format.channels = afGetChannels(file, AF_DEFAULT_TRACK); - afGetSampleFormat(file, AF_DEFAULT_TRACK, &in_fmt, - &format.bits); - - afGetPCMMapping(file, AF_DEFAULT_TRACK, &slope, - &intercept, &minclip, &maxclip); - - /* XXX: libao doesn't seem to like 8-bit sounds, so we'll - * let libaudiofile make them a bit better for us */ - if(format.bits == 8) - format.bits = 16; - - afSetVirtualSampleFormat(file, AF_DEFAULT_TRACK, - AF_SAMPFMT_TWOSCOMP, format.bits); - -#if G_BYTE_ORDER == G_BIG_ENDIAN - format.byte_format = AO_FMT_BIG; - afSetVirtualByteOrder(file, AF_DEFAULT_TRACK, - AF_BYTEORDER_BIGENDIAN); -#elif G_BYTE_ORDER == G_LITTLE_ENDIAN - format.byte_format = AO_FMT_LITTLE; - afSetVirtualByteOrder(file, AF_DEFAULT_TRACK, - AF_BYTEORDER_LITTLEENDIAN); -#else -#warning Unknown endianness -#endif - - bytes_per_frame = format.bits * format.channels / 8; - - device = ao_open_live(ao_driver, &format, NULL); - - if(device) { - int frames_read; - char buf[4096]; - int buf_frames = sizeof(buf) / bytes_per_frame; - - while((frames_read = afReadFrames(file, AF_DEFAULT_TRACK, - buf, buf_frames))) { - /* no need to scale at volume == 50 */ - if(volume != 50) - scale_pcm_data(buf, frames_read, format.bits, format.channels, - intercept, minclip, maxclip, scale); - if(!ao_play(device, buf, frames_read * bytes_per_frame)) - break; - } - ao_close(device); - } - afCloseFile(file); +#ifdef USE_GSTREAMER + volume = (float)(CLAMP(gaim_prefs_get_int("/gaim/gtk/sound/volume"),0,100)) / 50; + if (!strcmp(method, "automatic")) { + if (gaim_running_gnome()) { + sink = gst_element_factory_make("gconfaudiosink", "sink"); } - ao_shutdown(); - _exit(0); - } else { - /* Parent process */ - gaim_timeout_add(PLAY_SOUND_TIMEOUT, expire_old_child, GINT_TO_POINTER(pid)); + } else if (!strcmp(method, "esd")) { + sink = gst_element_factory_make("esdsink", "sink"); + } else if (!strcmp(method, "arts")) { + sink = gst_element_factory_make("artssink", "sink"); + } else if (!strcmp(method, "nas")) { + sink = gst_element_factory_make("nassink", "sink"); } -#else /* USE_AO */ + + uri = g_strdup_printf("file://%s", filename); + play = gst_element_factory_make("playbin", "play"); + + g_object_set(G_OBJECT(play), "uri", uri, + "volume", volume, + "audio-sink", sink, NULL); + + gst_bus_add_watch(gst_pipeline_get_bus(GST_PIPELINE(play)), + bus_call, play); + gst_element_set_state(play, GST_STATE_PLAYING); + + g_free(uri); + +#else /* USE_GSTREAMER */ gdk_beep(); return; -#endif /* USE_AO */ +#endif /* USE_GSTREAMER */ #else /* _WIN32 */ gaim_debug_info("sound", "Playing %s\n", filename); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-05-06 01:12:19
|
Revision: 16137 Author: rlaager Date: 2006-05-05 18:12:12 -0700 (Fri, 05 May 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16137&view=rev Log Message: ----------- SF Patch #1482820 from genpeng This is a fix for "--as-needed". Modified Paths: -------------- trunk/COPYRIGHT trunk/src/Makefile.am Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-05-05 19:35:15 UTC (rev 16136) +++ trunk/COPYRIGHT 2006-05-06 01:12:12 UTC (rev 16137) @@ -216,6 +216,7 @@ Ari Pollak Robey Pointer Nathan Poznick +Jory A. Pratt Brent Priddy Federicco Mena Quintero Yosef Radchenko Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2006-05-05 19:35:15 UTC (rev 16136) +++ trunk/src/Makefile.am 2006-05-06 01:12:12 UTC (rev 16137) @@ -199,6 +199,8 @@ libgaim_client_la_SOURCES = gaim-client.c gaim-client.h +libgaim_client_la_LIBADD = $(DBUS_LIBS) + gaim-client-bindings.c: dbus-analyze-functions.py $(dbus_exported) cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client > $@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lsc...@us...> - 2006-05-08 17:55:53
|
Revision: 16145 Author: lschiere Date: 2006-05-07 12:50:27 -0700 (Sun, 07 May 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16145&view=rev Log Message: ----------- a gaggle of translation updates and such Modified Paths: -------------- trunk/configure.ac trunk/po/ChangeLog trunk/po/POTFILES.in trunk/po/da.po trunk/po/de.po trunk/po/et.po trunk/po/fi.po trunk/po/gl.po trunk/po/sk.po trunk/po/sl.po trunk/src/gtkdialogs.c Added Paths: ----------- trunk/po/ca@valencia.po trunk/po/th.po Removed Paths: ------------- trunk/po/ca_ES@valencian.po Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-07 19:45:02 UTC (rev 16144) +++ trunk/configure.ac 2006-05-07 19:50:27 UTC (rev 16145) @@ -46,7 +46,7 @@ ;; esac -ALL_LINGUAS="am az bg bn bs ca ca_ES@valencian cs da de el en_AU en_CA en_GB es et fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te tr uk vi xh zh_CN zh_TW" +ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" AM_GLIB_GNU_GETTEXT dnl we don't use autobreak on cygwin!! Modified: trunk/po/ChangeLog =================================================================== --- trunk/po/ChangeLog 2006-05-07 19:45:02 UTC (rev 16144) +++ trunk/po/ChangeLog 2006-05-07 19:50:27 UTC (rev 16145) @@ -13,6 +13,8 @@ * English (British) translation updated (Stu Tomlinson and Luke Ross) * English (Canadian) translation updated (Adam Weinberger) * Estonian translation updated (Ivar Smolin) + * Euskera (Basque) translation added (Hizkuntza Politikarako + Sailburuordetza and Iñaki Larrañaga Murgoitio) * Finnish translation updated (Timo Jyrinki) * French translation updated (Éric Boumaour) * Galician translation updated (Ignacio Casal Quinteiro) @@ -36,14 +38,16 @@ * Romanian translation updated (Mişu Moldovan) * Russian translation updated (Dmitry Beloglazov) * Serbian translation updated (Nikola Kotur) + * Slovak translation updated (Richard Golier) * Slovenian translation updated (Martin Srebotnjak) * Spanish gaim.desktop translation updated (Javier Fernandez-Sanguino Peña) * Swedish translation updated (Peter Hjalmarsson) * Tamil translation updated (Viveka Nathan K) * Telugu translation added (Mr. Subbaramaih) + * Thai translation added (Isriya Paireepairit) * Turkish translation updated (Ahmet Alp BALKAN) * Ukrainian translation updated (Maxim V. Dziumanenko) - * Valencian translation added (Software Valencià) + * Valencian-Catalan translation added (Toni Hermoso, Josep Puigdemont) version 1.5.1: * Catalan win32 installer translation updated (Bernat López) Modified: trunk/po/POTFILES.in =================================================================== --- trunk/po/POTFILES.in 2006-05-07 19:45:02 UTC (rev 16144) +++ trunk/po/POTFILES.in 2006-05-07 19:50:27 UTC (rev 16145) @@ -1,4 +1,3 @@ - gaim.desktop.in plugins/ciphertest.c plugins/contact_priority.c @@ -112,7 +111,10 @@ src/protocols/napster/napster.c src/protocols/novell/nmuser.c src/protocols/novell/novell.c +src/protocols/oscar/flap_connection.c +src/protocols/oscar/odc.c src/protocols/oscar/oscar.c +src/protocols/oscar/peer.c src/protocols/sametime/sametime.c src/protocols/silc/buddy.c src/protocols/silc/chat.c Added: trunk/po/ca@valencia.po =================================================================== --- trunk/po/ca@valencia.po (rev 0) +++ trunk/po/ca@valencia.po 2006-05-07 19:50:27 UTC (rev 16145) @@ -0,0 +1,13159 @@ +# Gaim Catalan translation +# Copyright (C) 2003, JM Pérez Cáncer <jm...@co...> +# Copyright (C) unknown, Robert Millan <zer...@wa...> +# Copyright (C) December 2003 (from 2003-12-12 until 2003-12-18), +# January (2004-01-07,12), Xan <dxp...@te...> +# Copyright (c) 2004, 2005, 2006 +# Josep Puigdemont i Casamajó <jos...@gm...> +# +# This file is distributed under the same license as the Gaim package. +# +# There were translation notes here by Xan, (look in older CVS revisions), +# those notes have been replaced by the guidelines of Softcatalà: +# http://www.softcatala.org/projectes/eines/guiaestil/guiaestil.htm +# And the translation of related terms is here: +# http://www.softcatala.org/projectes/eines/recull/recull.htm +# We also use the officialy accepted neologisms from Termcat: +# http://www.termcat.net/cercaterm/ +# +# En Xan havia escrit uns apunts quant a la traducció (mireu versions antigues +# all CVS), els apunts s'han substituït per la guia d'estil de Softcatalà: +# http://www.softcatala.org/projectes/eines/guiaestil/guiaestil.htm +# També es fa servir el recull de termes de softcatalà per a la terminologia: +# http://www.softcatala.org/projectes/eines/recull/recull.htm +# així com les resolucions del Termcat quant als neologismes (que tenen +# preferència en cas de contradicció amb el recull de Softcatalà): +# http://www.termcat.net/cercaterm/ +# +# NOTE: adjectives in catalan go [almost] always to the end, for instance: +# NOTA: els adjectius en català acostumen a anar al final, per exemple: +# "New file" --> "Fitxer nou" +# +msgid "" +msgstr "" +"Project-Id-Version: Gaim\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-05-01 22:24+0200\n" +"PO-Revision-Date: 2006-05-02 02:26+0100\n" +"Last-Translator: Toni Hermoso Pulido <to...@so...>\n" +"Language-Team: Catalan <tra...@so...>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: ../gaim.desktop.in.h:1 +msgid "Gaim Internet Messenger" +msgstr "Missatger d'Internet Gaim" + +#: ../gaim.desktop.in.h:2 +msgid "Internet Messenger" +msgstr "Missatger d'Internet" + +#: ../gaim.desktop.in.h:3 +msgid "Send instant messages over multiple protocols" +msgstr "Envieu missatges instantanis en múltiples protocols" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ciphertest.c:264 +msgid "Cipher Test" +msgstr "Prova de xifratge" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/ciphertest.c:267 +#: ../plugins/ciphertest.c:269 +msgid "Tests the ciphers that ship with gaim." +msgstr "Fa una prova dels xifratges que es distribueixen amb el gaim." + +#: ../plugins/contact_priority.c:61 +msgid "Buddy is idle" +msgstr "L'amic és inactiu" + +#: ../plugins/contact_priority.c:62 +msgid "Buddy is away" +msgstr "L'amic és absent" + +#: ../plugins/contact_priority.c:63 +msgid "Buddy is \"extended\" away" +msgstr "L'amic és absent «de fa temps»" + +#. Not used yet. +#: ../plugins/contact_priority.c:66 +msgid "Buddy is mobile" +msgstr "L'amic és mòbil" + +#: ../plugins/contact_priority.c:68 +msgid "Buddy is offline" +msgstr "L'amic no està connectat" + +#: ../plugins/contact_priority.c:90 +msgid "Point values to use when..." +msgstr "Puntuació quan..." + +#: ../plugins/contact_priority.c:118 +msgid "The buddy with the <i>largest score</i> is the buddy who will have priority in the contact.\n" +msgstr "L'amic amb la <i>puntuació més alta</i> és l'amic que tindrà prioritat de contacte.\n" + +#: ../plugins/contact_priority.c:125 +msgid "Use last buddy when scores are equal" +msgstr "Utilitza el darrer amic quan les puntuacions siguen iguals" + +#: ../plugins/contact_priority.c:130 +msgid "Point values to use for account..." +msgstr "Puntuació a utilitzar per al compte..." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/contact_priority.c:182 +msgid "Contact Priority" +msgstr "Prioritat de contacte" + +#. *< name +#. *< version +#. *< summary +#: ../plugins/contact_priority.c:185 +msgid "Allows for controlling the values associated with different buddy states." +msgstr "Vos permet canviar els valors associats als diferents estats dels amics." + +#. *< description +#: ../plugins/contact_priority.c:187 +msgid "Allows for changing the point values of idle/away/offline states for buddies in contact priority computations." +msgstr "Vos permet canviar els valors dels estats inactiu, absent i desconnectat pel càlcul de la prioritat dels amics." + +#. *< api_version +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/crazychat/cc_gaim_plugin.c:146 +msgid "Crazychat" +msgstr "Crazychat" + +#. *< name +#. *< version +#. * summary +#: ../plugins/crazychat/cc_gaim_plugin.c:149 +msgid "Plugin to establish a Crazychat session." +msgstr "Connector per a establir una connexió Crazychat." + +#. * description +#: ../plugins/crazychat/cc_gaim_plugin.c:151 +msgid "Uses Gaim to obtain buddy ips to connect for a Crazychat session" +msgstr "Utilitza el Gaim per a obtindre les IP d'amics on connectar per a sessions Crazychat" + +#. make the network configuration frame +#: ../plugins/crazychat/cc_gaim_plugin.c:295 +msgid "Network Configuration" +msgstr "Configuració de xarxa" + +#: ../plugins/crazychat/cc_gaim_plugin.c:307 +msgid "TCP port" +msgstr "Port TCP" + +#: ../plugins/crazychat/cc_gaim_plugin.c:317 +msgid "UDP port" +msgstr "Port UDP" + +#. make the feature configuration frame +#: ../plugins/crazychat/cc_gaim_plugin.c:329 +msgid "Feature Calibration" +msgstr "Calibratge de característiques" + +#. add enabled / disabled +#: ../plugins/crazychat/cc_gaim_plugin.c:345 +#: ../src/gtkaccount.c:2262 +#: ../src/gtkplugin.c:574 +msgid "Enabled" +msgstr "Habilitat" + +#: ../plugins/crazychat/cc_gaim_plugin.c:350 +msgid "Disabled" +msgstr "Inhabilitat" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/dbus-example.c:152 +msgid "DBus" +msgstr "DBus" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/dbus-example.c:155 +#: ../plugins/dbus-example.c:157 +msgid "DBus Plugin Example" +msgstr "Exemple de connector DBus" + +# FIXME: Do not use "Right click", as left-handed people would use left click. +# Instead it might be better to use "primary button" (josep) +#: ../plugins/docklet/docklet.c:154 +msgid "Right-click for more unread messages...\n" +msgstr "Feu clic amb el botó principal per a més missatges per llegir...\n" + +#: ../plugins/docklet/docklet.c:157 +#: ../src/gtkblist.c:3230 +#, c-format +msgid "%d unread message from %s\n" +msgid_plural "%d unread messages from %s\n" +msgstr[0] "%d missatge per llegir de %s\n" +msgstr[1] "%d missatges per llegir de %s\n" + +#: ../plugins/docklet/docklet.c:432 +msgid "Change Status" +msgstr "Canvia l'estat" + +#: ../plugins/docklet/docklet.c:435 +#: ../src/gtkstatusbox.c:673 +#: ../src/protocols/gg/gg.c:996 +#: ../src/protocols/jabber/buddy.c:1104 +#: ../src/protocols/msn/state.c:29 +#: ../src/protocols/msn/state.c:30 +#: ../src/protocols/msn/state.c:37 +#: ../src/protocols/msn/state.c:38 +#: ../src/protocols/novell/novell.c:2845 +#: ../src/protocols/yahoo/yahoo.c:2733 +#: ../src/status.c:155 +msgid "Available" +msgstr "Disponible" + +#. Away stuff +#. get_yahoo_status_from_gaim_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#: ../plugins/docklet/docklet.c:439 +#: ../src/gtkprefs.c:1774 +#: ../src/gtkstatusbox.c:674 +#: ../src/protocols/gg/gg.c:999 +#: ../src/protocols/irc/irc.c:520 +#: ../src/protocols/irc/msgs.c:223 +#: ../src/protocols/jabber/buddy.c:1108 +#: ../src/protocols/novell/novell.c:2848 +#: ../src/protocols/oscar/oscar.c:719 +#: ../src/protocols/oscar/oscar.c:4391 +#: ../src/protocols/oscar/oscar.c:5434 +#: ../src/protocols/silc/buddy.c:1469 +#: ../src/protocols/yahoo/yahoo.c:3187 +#: ../src/protocols/yahoo/yahoo.c:3260 +#: ../src/status.c:158 +msgid "Away" +msgstr "Absent" + +#: ../plugins/docklet/docklet.c:443 +#: ../src/gtkstatusbox.c:675 +#: ../src/protocols/oscar/oscar.c:723 +#: ../src/protocols/yahoo/yahoo.c:2727 +#: ../src/status.c:157 +msgid "Invisible" +msgstr "Invisible" + +#: ../plugins/docklet/docklet.c:447 +#: ../src/gtkblist.c:2960 +#: ../src/gtkstatusbox.c:676 +#: ../src/protocols/gg/gg.c:993 +#: ../src/protocols/jabber/buddy.c:1102 +#: ../src/protocols/novell/novell.c:2857 +#: ../src/protocols/oscar/oscar.c:785 +#: ../src/protocols/oscar/oscar.c:5406 +#: ../src/protocols/yahoo/yahoo.c:2731 +#: ../src/status.c:154 +msgid "Offline" +msgstr "Fora de línia" + +#: ../plugins/docklet/docklet.c:467 +#: ../src/gtkstatusbox.c:681 +msgid "New..." +msgstr "Nou..." + +#: ../plugins/docklet/docklet.c:468 +#: ../src/gtkstatusbox.c:682 +msgid "Saved..." +msgstr "Desat..." + +#: ../plugins/docklet/docklet.c:484 +msgid "Show Buddy List" +msgstr "Mostra la llista d'amics" + +#: ../plugins/docklet/docklet.c:489 +#: ../src/gtkconv.c:5626 +msgid "Unread Messages" +msgstr "Missatges per llegir" + +#: ../plugins/docklet/docklet.c:510 +msgid "New Message..." +msgstr "Missatge nou..." + +#: ../plugins/docklet/docklet.c:519 +#: ../src/gtkaccount.c:2478 +msgid "Accounts" +msgstr "Comptes" + +#: ../plugins/docklet/docklet.c:520 +#: ../src/gtkplugin.c:538 +msgid "Plugins" +msgstr "Connectors" + +#: ../plugins/docklet/docklet.c:521 +#: ../src/gtkprefs.c:1915 +msgid "Preferences" +msgstr "Preferències" + +#: ../plugins/docklet/docklet.c:525 +msgid "Mute Sounds" +msgstr "Inhabilita els sons" + +#. TODO: need a submenu to change status, this needs to "link" +#. * to the status in the buddy list gtkstatusbox +#. +#: ../plugins/docklet/docklet.c:538 +msgid "Quit" +msgstr "Ix" + +#: ../plugins/docklet/docklet.c:679 +msgid "Blink tray icon for unread..." +msgstr "Pampallugueja la icona de l'àrea de notificació per a no llegits..." + +#: ../plugins/docklet/docklet.c:682 +msgid "_Instant Messages:" +msgstr "Missatges _instantanis:" + +#: ../plugins/docklet/docklet.c:684 +#: ../plugins/docklet/docklet.c:692 +#: ../plugins/win32/winprefs/winprefs.c:424 +#: ../src/gtkprefs.c:823 +#: ../src/gtkprefs.c:1764 +#: ../src/gtkprefs.c:1778 +msgid "Never" +msgstr "Mai" + +#: ../plugins/docklet/docklet.c:685 +msgid "In hidden conversations" +msgstr "En converses amagades" + +#: ../plugins/docklet/docklet.c:686 +#: ../plugins/docklet/docklet.c:694 +#: ../plugins/timestamp_format.c:39 +#: ../plugins/timestamp_format.c:48 +#: ../plugins/win32/winprefs/winprefs.c:425 +#: ../src/gtkprefs.c:825 +msgid "Always" +msgstr "Sempre" + +#: ../plugins/docklet/docklet.c:690 +msgid "C_hat Messages:" +msgstr "Missatges de _xat:" + +#: ../plugins/docklet/docklet.c:693 +msgid "When my nick is said" +msgstr "Quan s'anomene el meu sobrenom" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/docklet/docklet.c:720 +msgid "System Tray Icon" +msgstr "Icona d'estat" + +#. *< name +#. *< version +#. * summary +#: ../plugins/docklet/docklet.c:723 +msgid "Displays an icon for Gaim in the system tray." +msgstr "Mostra una icona per al Gaim a la barra d'estat." + +#. * description +#: ../plugins/docklet/docklet.c:725 +msgid "Displays a system tray icon (in GNOME, KDE, or Windows for example) to show the current status of Gaim, allow fast access to commonly used functions, and to toggle display of the buddy list. Also provides options to blink for unread messages." +msgstr "Mostra una icona a l'àrea de notificació (per exemple del GNOME, KDE o Windows) per a mostrar l'estat actual del Gaim, permet un accés ràpid de funcions d'ús habitual, i mostrar o oculta la llista d'amics. També permet opcions que fa que pampalluguegi si hi ha missatges per llegir." + +#: ../plugins/docklet/eggtrayicon.c:123 +msgid "Orientation" +msgstr "Orientació" + +#: ../plugins/docklet/eggtrayicon.c:124 +msgid "The orientation of the tray." +msgstr "Orientació de l'àrea de notificació." + +#: ../plugins/extplacement.c:80 +msgid "By conversation count" +msgstr "Pel nombre de converses" + +#: ../plugins/extplacement.c:101 +msgid "Conversation Placement" +msgstr "Ubicació de la conversa" + +#: ../plugins/extplacement.c:106 +msgid "Number of conversations per window" +msgstr "Nombre de converses per finestra" + +#: ../plugins/extplacement.c:112 +msgid "Separate IM and Chat windows when placing by number" +msgstr "Separa les finestres de xat i de MI quan s'ubiquin per nombre" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/extplacement.c:135 +msgid "ExtPlacement" +msgstr "Ubicació extra" + +#. *< name +#. *< version +#: ../plugins/extplacement.c:137 +msgid "Extra conversation placement options." +msgstr "Opcions extres per a la ubicació de les converses." + +#. *< summary +#. * description +#: ../plugins/extplacement.c:139 +msgid "Restrict the number of conversations per windows, optionally separating IMs and Chats" +msgstr "Restringeix el nombre de converses per finestra, separant opcionalment la MI dels xats" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/filectl.c:248 +msgid "Gaim File Control" +msgstr "Control de fitxers del Gaim" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/filectl.c:251 +#: ../plugins/filectl.c:253 +msgid "Allows you to control Gaim by entering commands in a file." +msgstr "Vos permet controlar el Gaim entrant ordres en un fitxer." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/gaiminc.c:91 +msgid "Gaim Demonstration Plugin" +msgstr "Connector de demostració del Gaim" + +#. *< name +#. *< version +#. * summary +#: ../plugins/gaiminc.c:94 +msgid "An example plugin that does stuff - see the description." +msgstr "Un connector d'exemple que fa coses - vegeu-ne la descripció." + +#. * description +#: ../plugins/gaiminc.c:96 +msgid "" +"This is a really cool plugin that does a lot of stuff:\n" +"- It tells you who wrote the program when you log in\n" +"- It reverses all incoming text\n" +"- It sends a message to people on your list immediately when they sign on" +msgstr "" +"Este és un connector realment interessant que fa moltes coses:\n" +"- mostra qui ha escrit el programa quan vos connecteu\n" +"- escriu a l'inrevés tots els missatges rebuts\n" +"- envia un missatge a tots els amics immediatament després de que es connecten" + +#: ../plugins/gaimrc.c:41 +msgid "Cursor Color" +msgstr "Color del cursor" + +#: ../plugins/gaimrc.c:42 +msgid "Secondary Cursor Color" +msgstr "Color secundari del cursor" + +#: ../plugins/gaimrc.c:43 +msgid "Hyperlink Color" +msgstr "Color dels hiperenllaços" + +#: ../plugins/gaimrc.c:56 +msgid "GtkTreeView Expander Size" +msgstr "Mida de l'expansor del GTkTreeView" + +#: ../plugins/gaimrc.c:57 +msgid "GtkTreeView Horizontal Separation" +msgstr "Separació horitzontal del GtkTreeView" + +#: ../plugins/gaimrc.c:76 +msgid "Conversation Entry" +msgstr "Entrada de la conversa" + +#: ../plugins/gaimrc.c:77 +msgid "Conversation History" +msgstr "Historial de converses" + +#: ../plugins/gaimrc.c:78 +msgid "Log Viewer" +msgstr "Visualitzador del registre" + +#: ../plugins/gaimrc.c:79 +msgid "Request Dialog" +msgstr "Diàleg de sol·licitud" + +#: ../plugins/gaimrc.c:80 +msgid "Notify Dialog" +msgstr "Diàleg de notificació" + +#: ../plugins/gaimrc.c:91 +msgid "GtkTreeView Indent Expanders" +msgstr "Expansors del sagnat del GTkTreeView" + +#: ../plugins/gaimrc.c:287 +#, c-format +msgid "Select Color for %s" +msgstr "Selecciona el color per a %s" + +#: ../plugins/gaimrc.c:289 +msgid "Select Color" +msgstr "Selecciona el color per a %s" + +#: ../plugins/gaimrc.c:324 +#, c-format +msgid "Select Font for %s" +msgstr "Selecciona el tipus de lletra per a %s" + +#: ../plugins/gaimrc.c:364 +msgid "Select Interface Font" +msgstr "Selecciona el tipus de lletra de la interfície" + +#: ../plugins/gaimrc.c:420 +msgid "General" +msgstr "General" + +#: ../plugins/gaimrc.c:425 +msgid "GTK+ Interface Font" +msgstr "Tipus de lletra de la interfície GTK+" + +#: ../plugins/gaimrc.c:445 +msgid "GTK+ Text Shortcut Theme" +msgstr "Tema de la drecera de text de GTK+" + +#: ../plugins/gaimrc.c:480 +msgid "Interface colors" +msgstr "Colors de la interfície" + +#: ../plugins/gaimrc.c:504 +msgid "Widget Sizes" +msgstr "Mides del giny" + +#: ../plugins/gaimrc.c:525 +msgid "Fonts" +msgstr "Tipus de lletra" + +#: ../plugins/gaimrc.c:548 +msgid "Tools" +msgstr "Eines" + +#: ../plugins/gaimrc.c:553 +#, c-format +msgid "Write settings to %s%sgtkrc-2.0" +msgstr "Escriu els paràmetres a %s%sgtkrc-2.0" + +#: ../plugins/gaimrc.c:561 +msgid "Re-read gtkrc files" +msgstr "Torna a llegir els fitxers gtkrc" + +#: ../plugins/gaimrc.c:588 +msgid "Gaim GTK+ Theme Control" +msgstr "Control de temes GTK+ del Gaim" + +#: ../plugins/gaimrc.c:590 +#: ../plugins/gaimrc.c:591 +msgid "Provides access to commonly used gtkrc settings." +msgstr "Proporciona accés a paràmetres del gtkrc utilitzats habitualment." + +#. Configuration frame +#: ../plugins/gestures/gestures.c:235 +msgid "Mouse Gestures Configuration" +msgstr "Configuració dels gestos del ratolí" + +#: ../plugins/gestures/gestures.c:242 +msgid "Middle mouse button" +msgstr "Botó central del ratolí" + +#: ../plugins/gestures/gestures.c:247 +msgid "Right mouse button" +msgstr "Botó dret del ratolí" + +#. "Visual gesture display" checkbox +#: ../plugins/gestures/gestures.c:259 +msgid "_Visual gesture display" +msgstr "Mostra els gestos _visualment" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/gestures/gestures.c:289 +msgid "Mouse Gestures" +msgstr "Gestos del ratolí" + +#. *< name +#. *< version +#. * summary +#: ../plugins/gestures/gestures.c:292 +msgid "Provides support for mouse gestures" +msgstr "Permet l'ús de gestos del ratolí" + +#. * description +#: ../plugins/gestures/gestures.c:294 +msgid "" +"Allows support for mouse gestures in conversation windows.\n" +"Drag the middle mouse button to perform certain actions:\n" +"\n" +"Drag down and then to the right to close a conversation.\n" +"Drag up and then to the left to switch to the previous conversation.\n" +"Drag up and then to the right to switch to the next conversation." +msgstr "" +"Permet utilitzar gesticulacions amb el ratolí en les finestres de conversa.\n" +"Arrossegueu el botó central del ratolí per a realitzar certes accions:\n" +"\n" +"A baix i després a la dreta per tancar una conversa\n" +"A dalt i després a l'esquerra per passar a l'anterior conversa\n" +"A dalt i després a la dreta per passar a la següent conversa" + +#. Extract their Name and put it in +#. Contact Info +#. Personal +#. Business +#: ../plugins/gevolution/add_buddy_dialog.c:131 +#: ../plugins/gevolution/assoc-buddy.c:119 +#: ../src/gtkplugin.c:587 +#: ../src/gtkroomlist.c:604 +#: ../src/protocols/jabber/jabber.c:755 +#: ../src/protocols/msn/msn.c:1532 +#: ../src/protocols/msn/msn.c:1585 +#: ../src/protocols/msn/msn.c:1606 +msgid "Name" +msgstr "Nom" + +#: ../plugins/gevolution/add_buddy_dialog.c:142 +msgid "Instant Messaging" +msgstr "Missatgeria instantània" + +#: ../plugins/gevolution/add_buddy_dialog.c:442 +#: ../src/gtkblist.c:4526 +#: ../src/protocols/silc/buddy.c:736 +#: ../src/protocols/silc/buddy.c:1030 +#: ../src/protocols/silc/buddy.c:1075 +#: ../src/protocols/silc/buddy.c:1174 +#: ../src/protocols/yahoo/yahoo.c:2976 +msgid "Add Buddy" +msgstr "Afig un amic" + +#. Add the label. +#: ../plugins/gevolution/add_buddy_dialog.c:455 +msgid "Select a person from your address book below, or add a new person." +msgstr "Seleccioneu una persona de la llibreta d'adreces d'ací baix, o afegiu-n'hi una de nova." + +#. "Search" +#: ../plugins/gevolution/add_buddy_dialog.c:468 +#: ../plugins/gevolution/assoc-buddy.c:353 +#: ../src/protocols/jabber/buddy.c:1460 +#: ../src/protocols/oscar/oscar.c:6014 +#: ../src/protocols/sametime/sametime.c:5531 +msgid "Search" +msgstr "Cerca" + +#: ../plugins/gevolution/add_buddy_dialog.c:549 +#: ../plugins/gevolution/new_person_dialog.c:307 +#: ../src/gtkblist.c:4610 +#: ../src/gtkblist.c:4974 +msgid "Group:" +msgstr "Grup:" + +#. "New Person" button +#: ../plugins/gevolution/add_buddy_dialog.c:575 +#: ../plugins/gevolution/assoc-buddy.c:464 +#: ../plugins/gevolution/new_person_dialog.c:251 +msgid "New Person" +msgstr "Nova persona" + +#. "Select Buddy" button +#: ../plugins/gevolution/add_buddy_dialog.c:592 +msgid "Select Buddy" +msgstr "Selecciona l'amic" + +#. Add the label. +#: ../plugins/gevolution/assoc-buddy.c:340 +msgid "Select a person from your address book to add this buddy to, or create a new person." +msgstr "Seleccioneu una persona de la llibreta d'adreces on afegir este amic, o creeu-n'hi una de nova." + +#. Add the expander +#: ../plugins/gevolution/assoc-buddy.c:428 +msgid "User _details" +msgstr "Detalls de l'_usuari" + +#. "Associate Buddy" button +#: ../plugins/gevolution/assoc-buddy.c:481 +msgid "_Associate Buddy" +msgstr "_Associa l'amic" + +#: ../plugins/gevolution/eds-utils.c:73 +#: ../plugins/gevolution/eds-utils.c:86 +#: ../src/protocols/jabber/jabber.c:1122 +msgid "None" +msgstr "Cap" + +#: ../plugins/gevolution/gevo-util.c:64 +#: ../plugins/gevolution/gevolution.c:96 +#: ../src/blist.c:516 +#: ../src/blist.c:1278 +#: ../src/blist.c:1505 +#: ../src/gtkblist.c:4419 +#: ../src/protocols/jabber/roster.c:65 +msgid "Buddies" +msgstr "Amics" + +#: ../plugins/gevolution/gevolution.c:262 +#: ../plugins/gevolution/gevolution.c:268 +msgid "Unable to send e-mail" +msgstr "No s'ha pogut enviar el correu electrònic." + +#: ../plugins/gevolution/gevolution.c:263 +msgid "The evolution executable was not found in the PATH." +msgstr "No s'ha trobat l'executable de l'evolution a la variable d'entorn PATH." + +#: ../plugins/gevolution/gevolution.c:269 +msgid "The specified buddy was not found in the Evolution Contacts." +msgstr "No s'ha trobat l'amic especificat en els contactes de l'Evolution." + +#: ../plugins/gevolution/gevolution.c:286 +msgid "Add to Address Book" +msgstr "Afig a la llibreta d'adreces" + +#: ../plugins/gevolution/gevolution.c:290 +msgid "Send E-Mail" +msgstr "Envia un correu" + +#. Configuration frame +#: ../plugins/gevolution/gevolution.c:417 +msgid "Evolution Integration Configuration" +msgstr "Configuració de la integració amb l'Evolution" + +#. Label +#: ../plugins/gevolution/gevolution.c:420 +msgid "Select all accounts that buddies should be auto-added to." +msgstr "Seleccioneu tots els comptes on els amics s'hagen d'afegir automàticament." + +#: ../plugins/gevolution/gevolution.c:450 +#: ../plugins/idle.c:150 +#: ../plugins/idle.c:186 +#: ../src/gtknotify.c:399 +#: ../src/gtkpounce.c:1262 +msgid "Account" +msgstr "Comptes" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/gevolution/gevolution.c:527 +msgid "Evolution Integration" +msgstr "Integració amb l'Evolution" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/gevolution/gevolution.c:530 +#: ../plugins/gevolution/gevolution.c:532 +msgid "Provides integration with Evolution." +msgstr "Proporciona la integració amb l'Evolution." + +#: ../plugins/gevolution/new_person_dialog.c:267 +msgid "Please enter the person's information below." +msgstr "Introduïu la informació de la persona ací davall." + +#: ../plugins/gevolution/new_person_dialog.c:271 +msgid "Please enter the buddy's screen name and account type below." +msgstr "Introduïu el nom d'usuari i el tipus de compte ací davall." + +#: ../plugins/gevolution/new_person_dialog.c:291 +msgid "Account type:" +msgstr "Tipus de compte:" + +#: ../plugins/gevolution/new_person_dialog.c:295 +#: ../src/gtkaccount.c:784 +#: ../src/gtkblist.c:4572 +msgid "Screen name:" +msgstr "Nom d'usuari:" + +#. Optional Information section +#: ../plugins/gevolution/new_person_dialog.c:315 +msgid "Optional information:" +msgstr "Informació opcional:" + +#. Label +#: ../plugins/gevolution/new_person_dialog.c:338 +#: ../src/gtkaccount.c:424 +#: ../src/gtkaccount.c:446 +#: ../src/protocols/oscar/oscar.c:625 +msgid "Buddy Icon" +msgstr "Icona de l'amic" + +#: ../plugins/gevolution/new_person_dialog.c:350 +msgid "First name:" +msgstr "Nom:" + +#: ../plugins/gevolution/new_person_dialog.c:362 +msgid "Last name:" +msgstr "Cognoms:" + +#: ../plugins/gevolution/new_person_dialog.c:382 +msgid "E-mail:" +msgstr "Correu electrònic:" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/gtk-signals-test.c:160 +msgid "GTK Signals Test" +msgstr "Comprovació de senyals GTK" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/gtk-signals-test.c:163 +#: ../plugins/gtk-signals-test.c:165 +msgid "Test to see that all ui signals are working properly." +msgstr "Prova per a veure si tots els senyals de la interfície d'usuari funcionen correctament." + +#: ../plugins/history.c:120 +#, c-format +msgid "<b>Conversation with %s on %s:</b><br>" +msgstr "<b>Converses amb %s a %s:</b><br>" + +#: ../plugins/history.c:147 +msgid "History Plugin Requires Logging" +msgstr "El connector per a l'historial requereix registre" + +#: ../plugins/history.c:148 +msgid "" +"Logging can be enabled from Tools -> Preferences -> Logging.\n" +"\n" +"Enabling logs for instant messages and/or chats will activate history for the same conversation type(s)." +msgstr "" +"El registre es pot habilitar des d'Eines -> Preferències -> Registre.\n" +"\n" +"En habilitar el registre per a missatges instantanis o xats s'activarà\n" +"l'historial per a cada tipus de conversa especificat." + +#: ../plugins/history.c:188 +msgid "History" +msgstr "Historial" + +#: ../plugins/history.c:190 +msgid "Shows recently logged conversations in new conversations." +msgstr "Mostra converses registrades recentment en noves converses." + +#: ../plugins/history.c:191 +msgid "When a new conversation is opened this plugin will insert the last conversation into the current conversation." +msgstr "Quan s'obre una nova conversa este connector inserirà la darrera conversa en la conversa actual." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/iconaway.c:82 +msgid "Iconify on Away" +msgstr "Iconifica si s'és absent" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/iconaway.c:85 +#: ../plugins/iconaway.c:87 +msgid "Iconifies the buddy list and your conversations when you go away." +msgstr "Iconifica la llista d'amics i les converses quan passeu a absent." + +#: ../plugins/idle.c:155 +#: ../plugins/idle.c:213 +msgid "Minutes" +msgstr "Minuts" + +#. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. +#. If that doesn't translate well into your language, drop the 's before translating. +#: ../plugins/idle.c:162 +#: ../plugins/idle.c:195 +#: ../plugins/idle.c:220 +#: ../plugins/idle.c:312 +msgid "I'dle Mak'er" +msgstr "I'dle Mak'er" + +#: ../plugins/idle.c:163 +#: ../plugins/idle.c:252 +msgid "Set Account Idle Time" +msgstr "Especifiqueu el temps inactiu per al compte" + +#: ../plugins/idle.c:166 +#: ../plugins/idle.c:224 +msgid "_Set" +msgstr "E_specifica" + +#: ../plugins/idle.c:167 +#: ../plugins/idle.c:200 +#: ../plugins/idle.c:225 +msgid "_Cancel" +msgstr "_Cancel·la" + +#: ../plugins/idle.c:180 +msgid "None of your accounts are idle." +msgstr "Cap dels vostres comptes és inactiu." + +# FIXME +#: ../plugins/idle.c:196 +#: ../plugins/idle.c:256 +msgid "Unset Account Idle Time" +msgstr "Desestableix el temps d'inactivitat del compte" + +# FIXME +#: ../plugins/idle.c:199 +msgid "_Unset" +msgstr "_Desestableix" + +#: ../plugins/idle.c:221 +#: ../plugins/idle.c:260 +msgid "Set Idle Time for All Accounts" +msgstr "Estableix el temps d'inactivitat de tots els comptes" + +#: ../plugins/idle.c:265 +msgid "Unset Idle Time for All Idled Accounts" +msgstr "Desestableix el temps d'inactivitat de tots els comptes inactius" + +#: ../plugins/idle.c:314 +#: ../plugins/idle.c:315 +msgid "Allows you to hand-configure how long you've been idle" +msgstr "Vos permet configurar a mà per quant de temps heu estat inactiu" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ipc-test-client.c:87 +msgid "IPC Test Client" +msgstr "Client de proves d'IPC" + +#. *< name +#. *< version +#. * summary +#: ../plugins/ipc-test-client.c:90 +msgid "Test plugin IPC support, as a client." +msgstr "Connector de proves com a client per a IPC." + +#. * description +#: ../plugins/ipc-test-client.c:92 +msgid "Test plugin IPC support, as a client. This locates the server plugin and calls the commands registered." +msgstr "Connector de proves, com a client, per a IPC. Localitza el connector del servidor i crida les ordres registrades." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ipc-test-server.c:74 +msgid "IPC Test Server" +msgstr "Servidor de proves d'IPC" + +#. *< name +#. *< version +#. * summary +#: ../plugins/ipc-test-server.c:77 +msgid "Test plugin IPC support, as a server." +msgstr "Connector de proves per a servidor d'IPC." + +#. * description +#: ../plugins/ipc-test-server.c:79 +msgid "Test plugin IPC support, as a server. This registers the IPC commands." +msgstr "Connector de proves per a servidor d'IPC, que registra les ordres IPC." + +#: ../plugins/log_reader.c:1405 +msgid "User is offline." +msgstr "L'usuari és fora de línia." + +#: ../plugins/log_reader.c:1411 +msgid "Auto-response sent:" +msgstr "Resposta automàtica enviada:" + +#: ../plugins/log_reader.c:1421 +#: ../plugins/log_reader.c:1424 +#: ../plugins/statenotify.c:80 +#, c-format +msgid "%s has signed off." +msgstr "%s s'ha desconnectat." + +#: ../plugins/log_reader.c:1438 +msgid "One or more messages may have been undeliverable." +msgstr "Pot ser que no s'hagen pogut trametre un o més missatges." + +#. MSG_SERVER_DISCONNECTING +#. we have been kicked off =^( +#: ../plugins/log_reader.c:1448 +#: ../src/protocols/napster/napster.c:363 +msgid "You were disconnected from the server." +msgstr "Heu estat desconnectat del servidor." + +#: ../plugins/log_reader.c:1456 +msgid "You are currently disconnected. Messages will not be received unless you are logged in." +msgstr "Esteu desconnectat. No rebreu missatges a no ser que vos connecteu." + +#: ../plugins/log_reader.c:1471 +msgid "Message could not be sent because the maximum length was exceeded." +msgstr "El missatge no s'ha pogut enviar perquè s'ha superat la mida màxima." + +#: ../plugins/log_reader.c:1476 +msgid "Message could not be sent." +msgstr "No s'ha pogut enviar el missatge." + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#: ../plugins/log_reader.c:1838 +#: ../plugins/log_reader.c:1943 +msgid "Adium" +msgstr "Adium" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#: ../plugins/log_reader.c:1850 +#: ../plugins/log_reader.c:1947 +msgid "Fire" +msgstr "Fire" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#: ../plugins/log_reader.c:1862 +#: ../plugins/log_reader.c:1951 +msgid "Messenger Plus!" +msgstr "Messenger Plus!" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#: ../plugins/log_reader.c:1874 +#: ../plugins/log_reader.c:1955 +msgid "MSN Messenger" +msgstr "MSN Messenger" + +#. The names of IM clients are marked for translation at the request of +#. translators who wanted to transliterate them. Many translators +#. choose to leave them alone. Choose what's best for your language. +#: ../plugins/log_reader.c:1886 +#: ../plugins/log_reader.c:1959 +msgid "Trillian" +msgstr "Trillian" + +#. Add general preferences. +#: ../plugins/log_reader.c:1925 +msgid "General Log Reading Configuration" +msgstr "Configuració general de la lectura de registres" + +#: ../plugins/log_reader.c:1929 +msgid "Fast size calculations" +msgstr "Càlculs de mida ràpids" + +#: ../plugins/log_reader.c:1933 +msgid "Use name heuristics" +msgstr "Utilitza heurístiques de noms" + +#. Add Log Directory preferences. +#: ../plugins/log_reader.c:1939 +msgid "Log Directory" +msgstr "Directori dels registres" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/log_reader.c:1982 +msgid "Log Reader" +msgstr "Lector del registre" + +#. *< name +#. *< version +#. * summary +#: ../plugins/log_reader.c:1986 +msgid "Includes other IM clients' logs in the log viewer." +msgstr "Inclou registres d'altres clients de MI en el visualitzador de registres." + +#. * description +#: ../plugins/log_reader.c:1990 +msgid "When viewing logs, this plugin will include logs from other IM clients. Currently, this includes Adium, Fire, Messenger Plus!, MSN Messenger, and Trillian." +msgstr "Quan es visualitzen els registres, este connector inclourà registres d'altres clients de MI. De moment, es poden incloure els d'Adium, Fire, Messenger Plus!, MSN Messenger, i Trillian." + +#: ../plugins/mailchk.c:160 +msgid "Mail Checker" +msgstr "Comprovador de correu" + +#: ../plugins/mailchk.c:162 +msgid "Checks for new local mail." +msgstr "Comprova si hi ha correu nou a la màquina local." + +#: ../plugins/mailchk.c:163 +msgid "Adds a small box to the buddy list that shows if you have new mail." +msgstr "Afig una caixeta a la llista d'amics que indica si teniu correus nous." + +#: ../plugins/mono/loader/mono.c:213 +msgid "Mono Plugin Loader" +msgstr "Carregador de connectors Mono" + +#: ../plugins/mono/loader/mono.c:215 +#: ../plugins/mono/loader/mono.c:216 +msgid "Loads .NET plugins with Mono." +msgstr "Carrega connectors .NET amb Mono." + +#: ../plugins/musicmessaging/musicmessaging.c:44 +msgid "A music messaging session has been requested. Please click the MM icon to accept." +msgstr "S'ha sol·licitat una sessió de missatgeria de música. Feu clic a la icona de MM per a acceptar." + +#: ../plugins/musicmessaging/musicmessaging.c:45 +msgid "Music messaging session confirmed." +msgstr "S'ha confirmat la sessió de missatgeria de música." + +#: ../plugins/musicmessaging/musicmessaging.c:414 +msgid "Music Messaging" +msgstr "Missatgeria de música" + +#: ../plugins/musicmessaging/musicmessaging.c:415 +msgid "There was a conflict in running the command:" +msgstr "S'ha produït un conflicte en executar l'ordre:" + +#: ../plugins/musicmessaging/musicmessaging.c:523 +msgid "Error Running Editor" +msgstr "S'ha produït un error en executar l'editor" + +#: ../plugins/musicmessaging/musicmessaging.c:524 +msgid "The following error has occured:" +msgstr "S'ha produït el següent error:" + +#. Configuration frame +#: ../plugins/musicmessaging/musicmessaging.c:623 +msgid "Music Messaging Configuration" +msgstr "Configuració dels missatges de música" + +#: ../plugins/musicmessaging/musicmessaging.c:627 +msgid "Score Editor Path" +msgstr "Camí de l'editor de partitures" + +#: ../plugins/musicmessaging/musicmessaging.c:628 +msgid "_Apply" +msgstr "_Aplica" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#. *< name +#. *< version +#: ../plugins/musicmessaging/musicmessaging.c:663 +msgid "Music Messaging Plugin for collaborative composition." +msgstr "Connector de missatgeria de música per a composar conjuntament." + +#. * summary +#: ../plugins/musicmessaging/musicmessaging.c:665 +msgid "The Music Messaging Plugin allows a number of users to simultaneously work on a piece of music by editting a common score in real-time." +msgstr "El connector per a missatgeria de música permet que diferents uruaris puguen treballar en una mateixa peça de música, editant la mateixa partitura en temps real." + +#. ---------- "Notify For" ---------- +#: ../plugins/notify.c:638 +msgid "Notify For" +msgstr "Notifica per a" + +#: ../plugins/notify.c:642 +msgid "_IM windows" +msgstr "Finestres de M_I" + +#: ../plugins/notify.c:649 +msgid "C_hat windows" +msgstr "Finestres de _xat" + +#: ../plugins/notify.c:657 +msgid "\t_Only when someone says your screen name" +msgstr "\tN_omés quan algú diga el vostre nom d'usuari" + +#: ../plugins/notify.c:667 +msgid "_Focused windows" +msgstr "_Finestres actives" + +#. ---------- "Notification Methods" ---------- +#: ../plugins/notify.c:675 +msgid "Notification Methods" +msgstr "Mètodes de notificació" + +#: ../plugins/notify.c:682 +msgid "Prepend _string into window title:" +msgstr "Po_sa esta cadena davant del títol de la finestra:" + +#. Count method button +#: ../plugins/notify.c:701 +msgid "Insert c_ount of new messages into window title" +msgstr "Insereix el _nombre de missatges nous al títol de la finestra" + +#. Urgent method button +#: ../plugins/notify.c:710 +msgid "Set window manager \"_URGENT\" hint" +msgstr "Aplica l'opció «_URGENT» del gestor de finestres" + +#. Raise window method button +#: ../plugins/notify.c:719 +msgid "R_aise conversation window" +msgstr "_Puja la finestra de conversa" + +#. ---------- "Notification Removals" ---------- +#: ../plugins/notify.c:727 +msgid "Notification Removal" +msgstr "Supressió de notificacions" + +#. Remove on focus button +#: ../plugins/notify.c:732 +msgid "Remove when conversation window _gains focus" +msgstr "Suprimeix quan la finestra de la conversa esti_ga activada" + +#. Remove on click button +#: ../plugins/notify.c:739 +msgid "Remove when conversation window _receives click" +msgstr "Suprimeix quan es faça clic a la finestra de la conve_rsa" + +#. Remove on type button +#: ../plugins/notify.c:747 +msgid "Remove when _typing in conversation window" +msgstr "Suprimeix quan s'escriga a la fines_tra de la conversa" + +#. Remove on message send button +#: ../plugins/notify.c:755 +msgid "Remove when a _message gets sent" +msgstr "Suprimeix quan s'envie un _missatge" + +#. Remove on conversation switch button +#: ../plugins/notify.c:764 +msgid "Remove on switch to conversation ta_b" +msgstr "Suprimeix en canviar a la _pestanya de la conversa" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/notify.c:853 +msgid "Message Notification" +msgstr "Notificació de missatges" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/notify.c:856 +#: ../plugins/notify.c:858 +msgid "Provides a variety of ways of notifying you of unread messages." +msgstr "Vos proporciona diferents maneres de notificar-vos la presència de missatges per llegir." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/perl/perl.c:583 +msgid "Perl Plugin Loader" +msgstr "Carregador de connectors en Perl" + +#. *< name +#. *< version +#. *< summary +#: ../plugins/perl/perl.c:585 +#: ../plugins/perl/perl.c:586 +msgid "Provides support for loading perl plugins." +msgstr "Proporciona suport per a carregar connectors en Perl." + +#: ../plugins/psychic.c:19 +msgid "Psychic Mode" +msgstr "Mode psicòtic" + +#: ../plugins/psychic.c:20 +msgid "Psychic mode for incoming conversation" +msgstr "Mode psicòtic per a converses entrants" + +#: ../plugins/psychic.c:21 +msgid "Causes conversation windows to appear as other users begin to message you. This works for AIM, ICQ, Jabber, Sametime, and Yahoo!" +msgstr "Fa que apareguen finestres de conversa així que altres usuaris vos comencen a enviar missatges. Funciona per a AIM, ICQ, Jabber, Sametime, i Yahoo!" + +#. This is a quote from Star Wars. You should +#. probably not translate it literally. If +#. you can't find a fitting cultural reference +#. in your language, consider translating +#. something like this instead: +#. "You feel a new message coming." +#: ../plugins/psychic.c:63 +msgid "You feel a disturbance in the force..." +msgstr "Sentireu una certa pertorbació en la força..." + +#: ../plugins/psychic.c:82 +msgid "Only enable for users on the buddy list" +msgstr "Habilita-ho només per als usuaris de la llista d'amics" + +#: ../plugins/psychic.c:87 +msgid "Disable when away" +msgstr "Inhabilita-ho quan siga absent" + +#: ../plugins/psychic.c:91 +msgid "Display notification message in conversations" +msgstr "Mostra un missatge de notificació a la conversa" + +#: ../plugins/raw.c:175 +msgid "Raw" +msgstr "En brut" + +#: ../plugins/raw.c:177 +msgid "Lets you send raw input to text-based protocols." +msgstr "Vos permet enviar dades en brut als protocols en mode text." + +#: ../plugins/raw.c:178 +msgid "Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit 'Enter' in the entry box to send. Watch the debug window." +msgstr "Permet enviar dades en brut als protocols en mode text (Jabber, MSN, IRC, TOC). Premeu la tecla de retorn a la caixa d'entrada per a enviar-les. Observeu la finestra de depuració." + +#: ../plugins/relnot.c:63 +#, c-format +msgid "You are using Gaim version %s. The current version is %s.<hr>" +msgstr "Esteu utilitzant la versió %s del Gaim. La versió actual és %s.<hr>" + +#: ../plugins/relnot.c:69 +#, c-format +msgid "" +"<b>ChangeLog:</b>\n" +"%s<br><br>" +msgstr "" +"<b>Registre de canvis:</b>\n" +"%s<br><br>" + +#: ../plugins/relnot.c:74 +#, c-format +msgid "You can get version %s from:<br><a href=\"http://gaim.sourceforge.net/\">http://gaim.sourceforge.net</a>." +msgstr "Podeu obtindre la versió %s de:<br><a href=\"http://gaim.sourceforge.net/\">http://gaim.sourceforge.net</a>." + +#: ../plugins/relnot.c:78 +#: ../plugins/relnot.c:79 +msgid "New Version Available" +msgstr "Nova versió disponible" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/relnot.c:137 +msgid "Release Notification" +msgstr "Notificació de versions noves" + +#. *< name +#. *< version +#. * summary +#: ../plugins/relnot.c:140 +msgid "Checks periodically for new releases." +msgstr "Comprova periòdicament si hi ha versions noves." + +#. * description +#: ../plugins/relnot.c:142 +msgid "Checks periodically for new releases and notifies the user with the ChangeLog." +msgstr "Comprova periòdicament si hi ha versions noves i vos ho notifica juntament amb el seu registre de canvis." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/signals-test.c:684 +msgid "Signals Test" +msgstr "Comprovació de senyals" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/signals-test.c:687 +#: ../plugins/signals-test.c:689 +msgid "Test to see that all signals are working properly." +msgstr "Prova per a veure si tots els senyals funcionen correctament." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/simple.c:37 +msgid "Simple Plugin" +msgstr "Connector simple" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/simple.c:40 +#: ../plugins/simple.c:42 +msgid "Tests to see that most things are working." +msgstr "Proves per a veure si la majoria de coses funcionen." + +#: ../plugins/spellchk.c:1918 +msgid "Duplicate Correction" +msgstr "Duplicació de la correcció" + +#: ../plugins/spellchk.c:1919 +msgid "The specified word already exists in the correction list." +msgstr "La paraula especificada ja existeix a la llista de correccions." + +#: ../plugins/spellchk.c:2128 +msgid "Text Replacements" +msgstr "Substitució de text" + +#: ../plugins/spellchk.c:2151 +msgid "You type" +msgstr "Quan escriviu" + +#: ../plugins/spellchk.c:2165 +msgid "You send" +msgstr "S'enviarà" + +#: ../plugins/spellchk.c:2179 +msgid "Whole words only" +msgstr "Només paraules completes" + +#: ../plugins/spellchk.c:2191 +msgid "Case sensitive" +msgstr "Distingeix majúscules i minúscules" + +#: ../plugins/spellchk.c:2217 +msgid "Add a new text replacement" +msgstr "Afig una altra substitució de text" + +#: ../plugins/spellchk.c:2233 +msgid "You _type:" +msgstr "_Escriviu:" + +#: ../plugins/spellchk.c:2250 +msgid "You _send:" +msgstr "_S'envia:" + +#. Created here so it can be passed to whole_words_button_toggled. +#: ../plugins/spellchk.c:2262 +msgid "_Exact case match (uncheck for automatic case handling)" +msgstr "Coincidència _exacta de majúscules/minúscules (desactiveu-ho per a una gestió automàtica)" + +#: ../plugins/spellchk.c:2264 +msgid "Only replace _whole words" +msgstr "Substitueix només paraules _completes" + +#: ../plugins/spellchk.c:2289 +msgid "General Text Replacement Options" +msgstr "Opcions generals de la substitució de text" + +#: ../plugins/spellchk.c:2290 +msgid "Enable replacement of last word on send" +msgstr "Habilita la substitució de la darrera paraula en enviar" + +#: ../plugins/spellchk.c:2315 +msgid "Text replacement" +msgstr "Substitució de text" + +#: ../plugins/spellchk.c:2317 +#: ../plugins/spellchk.c:2318 +msgid "Replaces text in outgoing messages according to user-defined rules." +msgstr "Substitueix el text dels missatges que s'envien utilitzant les regles que hàgiu establert." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ssl/ssl-gnutls.c:251 +msgid "GNUTLS" +msgstr "GNUTLS" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/ssl/ssl-gnutls.c:254 +#: ../plugins/ssl/ssl-gnutls.c:256 +msgid "Provides SSL support through GNUTLS." +msgstr "Proporciona suport per a SSL a través de la biblioteca GNUTLS." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ssl/ssl-nss.c:412 +msgid "NSS" +msgstr "NSS" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/ssl/ssl-nss.c:415 +#: ../plugins/ssl/ssl-nss.c:417 +msgid "Provides SSL support through Mozilla NSS." +msgstr "Proporciona suport per a SSL a través de la biblioteca NSS de Mozilla." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ssl/ssl.c:94 +msgid "SSL" +msgstr "SSL" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/ssl/ssl.c:97 +#: ../plugins/ssl/ssl.c:99 +msgid "Provides a wrapper around SSL support libraries." +msgstr "Proporciona una interfície per a les biblioteques de suport d'SSL." + +#: ../plugins/statenotify.c:50 +#, c-format +msgid "%s is no longer away." +msgstr "%s ja no és absent." + +#: ../plugins/statenotify.c:52 +#, c-format +msgid "%s has gone away." +msgstr "%s ha passat a absent." + +#: ../plugins/statenotify.c:62 +#, c-format +msgid "%s has become idle." +msgstr "%s ha passat a inactiu." + +#: ../plugins/statenotify.c:64 +#, c-format +msgid "%s is no longer idle." +msgstr "%s ja no és inactiu." + +#: ../plugins/statenotify.c:73 +#, c-format +msgid "%s has signed on." +msgstr "%s s'ha connectat." + +#: ../plugins/statenotify.c:91 +msgid "Notify When" +msgstr "Notifica quan" + +#: ../plugins/statenotify.c:94 +msgid "Buddy Goes _Away" +msgstr "Un amic passe a _absent:" + +#: ../plugins/statenotify.c:97 +msgid "Buddy Goes _Idle" +msgstr "Un amic passe a _inactiu:" + +#: ../plugins/statenotify.c:100 +msgid "Buddy _Signs On/Off" +msgstr "Un amic e_s connecte/desconnecte" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/statenotify.c:142 +msgid "Buddy State Notification" +msgstr "Notificació de l'estat dels amics" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/statenotify.c:145 +#: ../plugins/statenotify.c:148 +msgid "Notifies in a conversation window when a buddy goes or returns from away or idle." +msgstr "Notifica en la finestra de conversa quan un amic canvie d'estat." + +#: ../plugins/tcl/tcl.c:369 +msgid "Tcl Plugin Loader" +msgstr "Carregador de connectors en Tcl" + +#: ../plugins/tcl/tcl.c:371 +#: ../plugins/tcl/tcl.c:372 +msgid "Provides support for loading Tcl plugins" +msgstr "Proporciona suport per a carregar els connectors en Tcl" + +# FIXME (josep) +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/ticker/ticker.c:77 +#: ../plugins/ticker/ticker.c:355 +msgid "Buddy Ticker" +msgstr "Indicador d'amics" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/ticker/ticker.c:358 +#: ../plugins/ticker/ticker.c:360 +msgid "A horizontal scrolling version of the buddy list." +msgstr "Una versió horitzontal de la llista d'amics." + +#: ../plugins/timestamp.c:186 +msgid "iChat Timestamp" +msgstr "Marca horària per a l'iChat" + +#: ../plugins/timestamp.c:193 +msgid "Delay" +msgstr "Retard" + +#: ../plugins/timestamp.c:200 +msgid "minutes." +msgstr "minuts." + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/timestamp.c:254 +msgid "Timestamp" +msgstr "Marca horària" + +#. *< name +#. *< version +#. * summary +#. * description +#: ../plugins/timestamp.c:257 +#: ../plugins/timestamp.c:259 +msgid "Adds iChat-style timestamps to conversations every N minutes." +msgstr "Afig marques horàries a les converses a l'estil iChat cada N minuts." + +#: ../plugins/timestamp_format.c:22 +msgid "Timestamp Format Options" +msgstr "Opcions del format de les marques horàries" + +#: ../plugins/timestamp_format.c:27 +msgid "_Force (traditional Gaim) 24-hour time format" +msgstr "_Força el format de 24 hores (Gaim tradicional)" + +#: ../plugins/timestamp_format.c:30 +msgid "Show dates in..." +msgstr "Mostra dates a..." + +#: ../plugins/timestamp_format.c:35 +msgid "Co_nversations:" +msgstr "Co_nverses:" + +#: ../plugins/timestamp_format.c:37 +#: ../plugins/timestamp_format.c:46 +msgid "For delayed messages" +msgstr "Per a missatges endarrerits" + +#: ../plugins/timestamp_format.c:38 +#: ../plugins/timestamp_format.c:47 +msgid "For delayed messages and in chats" +msgstr "Per a missatges endarrerits en xats" + +#: ../plugins/timestamp_format.c:44 +msgid "_Message Logs:" +msgstr "Registres de _missatges:" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/timestamp_format.c:150 +msgid "Message Timestamp Formats" +msgstr "Formats de les marques horàries dels missatges" + +#. *< name +#. *< version +#. * summary +#: ../plugins/timestamp_format.c:153 +msgid "Customizes the message timestamp formats." +msgstr "Personalitza el format de les marques horàries dels missatges." + +#. * description +#: ../plugins/timestamp_format.c:155 +msgid "This plugin allows the user to customize conversation and logging message timestamp formats." +msgstr "Este connector permet a l'usuari personalitzar els formats de les marques horàries de les converses i dels registres." + +#: ../plugins/win32/transparency/win2ktrans.c:183 +#: ../plugins/win32/transparency/win2ktrans.c:569 +#: ../plugins/win32/transparency/win2ktrans.c:616 +msgid "Opacity:" +msgstr "Opacitat:" + +#. IM Convo trans options +#: ../plugins/win32/transparency/win2ktrans.c:533 +msgid "IM Conversation Windows" +msgstr "Finestres de MI" + +#: ../plugins/win32/transparency/win2ktrans.c:534 +msgid "_IM window transparency" +msgstr "Transparència de les finestres de M_I" + +#: ../plugins/win32/transparency/win2ktrans.c:548 +msgid "_Show slider bar in IM window" +msgstr "_Mostra la barra d'ajustament a la finestra de MI" + +#: ../plugins/win32/transparency/win2ktrans.c:555 +msgid "Remove IM window transparency on focus" +msgstr "Treu la transparència de les finestres de MI en obtindre el focus" + +#: ../plugins/win32/transparency/win2ktrans.c:558 +#: ../plugins/win32/transparency/win2ktrans.c:606 +msgid "Always on top" +msgstr "Sempre per damunt" + +#. Buddy List trans options +#: ../plugins/win32/transparency/win2ktrans.c:590 +msgid "Buddy List Window" +msgstr "Finestra de la llista d'amics" + +#: ../plugins/win32/transparency/win2ktrans.c:591 +msgid "_Buddy List window transparency" +msgstr "_Transparència de la finestra de la llista d'amics" + +#: ../plugins/win32/transparency/win2ktrans.c:604 +msgid "Remove Buddy List window transparency on focus" +msgstr "Treu la transparència de la finestra de la llista d'amics en obtindre el focus" + +#. *< type +#. *< ui_requirement +#. *< flags +#. *< dependencies +#. *< priority +#. *< id +#: ../plugins/win32/transparency/win2ktrans.c:658 +msgid "Transparency" +msgstr "Transparència" + +#. *< name +#. *< version +#. * summary +#: ../plugins/win32/transparency/win2ktrans.c:661 +msgid "Variable Transparency for the buddy list and conversations." +msgstr "Transparència variable per a converses i la llista d'amics." + +#. * description +#: ../plugins/win32/transparency/win2ktrans.c:663 +msgid "" +"This plugin enables variable alpha transparency on conversation windows and the buddy list.\n" +"\n" +"* Note: This plugin requires Win2000 or greater." +msgstr "" +"Este connector habilita la transparència variables en finestres de conversa, i la llista d'amics.\n" +"\n" +"* Nota: este connector requereix Windows 2000 o superior." + +#: ../plugins/win32/winprefs/winprefs.c:397 +msgid "GTK+ Runtime Version" +msgstr "Versió del mòdul d'execució de GTK+" + +#. Autostart +#: ../plugins/win32/winprefs/winprefs.c:405 +msgid "Startup" +msgstr "Inicialització" + +#: ../plugins/win32/winprefs/winprefs.c:406 +msgid "_Start Gaim on Windows startup" +msgstr "_Inicia el Gaim en iniciar Windows" + +#. Buddy List +#: ../plugins/win32/winprefs/winprefs.c:417 +#: ../src/gtkblist.c:3663 +msgid "Buddy List" +msgstr "Llista d'amics" + +#: ../plugins/win32/winprefs/winprefs.c:418 +msgid "_Dockable Buddy List" +msgstr "Llista _d'amics acoblable" + +#. Blist On Top +#: ../plugins/win32/winprefs/winprefs.c:422 +msgid "_Keep Buddy List window on top:" +msgstr "_Conserva la finestra d'amics per damunt:" + +#. XXX: Did this ever work? +#: ../plugins/win32/winprefs/winprefs.c:427 +msgid "Only when docked" +msgstr "Només si està acoblada" + +#. Conversations +#: ../plugins/win32/winprefs/winprefs.c:431 +#: ../src/gtkprefs.c:819 +#: ../src/gtkprefs.c:1879 +msgid "Conversations" +msgstr "Converses" + +#: ../plugins/win32/winprefs/winprefs.c:432 +msgid "_Flash window when messages are received" +msgstr "_Fes que la finestra faça un flaix quan arriben missatges" + +#: ../plugins/win32/winprefs/winprefs.c:456 +msgid "WinGaim Options" +msgstr "Opcions del WinGaim" + +#: ../plugins/win32/winprefs/winprefs.c:458 +msgid "Options specific to Windows Gaim." +msgstr "Opcions específiques de la versió del Gaim per a Windows" + +#: ../plugins/win32/winprefs/winprefs.c:459 +msgid "Provides options specific to Windows Gaim, such as buddy list docking and conversation flashing." +msgstr "" +"Proporciona opcions específiques per a la versió Windows del Gaim, com ara\n" +"l'acoblament de la llista d'amics i que les converses facen flaix." + +#: ../src/account.c:773 +msgid "accounts" +msgstr "comptes" + +#: ../src/account.c:923 +msgid "Password is required to sign on." +msgstr "Es necessita la contrasenya per a poder connectar-s'hi." + +#: ../src/account.c:948 +#, c-format +msgid "Enter password for %s (%s)" +msgstr "Introduïu la contrasenya per a %s (%s)" + +#: ../src/account.c:955 +msgid "Enter Password" +msgstr "Introduïu la contrasenya" + +#: ../src/account.c:960 +msgid "Save password" +msgstr "Alça la contrasenya" + +#. * +#. * A wrapper for gaim_request_action() that uses @c OK and @c Cancel buttons. +#. +#: ../src/account.c:968 +#: ../src/account.c:1139 +#: ../src/gtkblist.c:3546 +#: ../src/gtkdialogs.c:602 +#: ../src/gtkdialogs.c:739 +#: ../src/gtkdialogs.c:803 +#: ../src/gtkrequest.c:269 +#: ../src/protocols/gg/gg.c:497 +#: ../src/protocols/gg/gg.c:655 +#: ../src/protocols/gg/gg.c:791 +#: ../src/protocols/jabber/jabber.c:1319 +#: ../src/protocols/jabber/xdata.c:337 +#: ../src/protocols/msn/msn.c:250 +#: ../src/protocols/msn/msn.c:265 +#: ../src/protocols/msn/msn.c:280 +#: ../src/protocols/msn/msn.c:295 +#: ../src/protocols/oscar/oscar.c:1408 +#: ../src/protocols/oscar/oscar.c:2167 +#: ../src/protocols/oscar/oscar.c:2260 +#: ../src/protocols/oscar/oscar.c:5684 +#: ../src/protocols/oscar/oscar.c:5864 +#: ../src/protocols/oscar/os... [truncated message content] |
From: <amc...@us...> - 2006-06-01 05:22:16
|
Revision: 16211 Author: amc_grim Date: 2006-05-31 22:22:10 -0700 (Wed, 31 May 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16211&view=rev Log Message: ----------- these have been bugging me.. Property Changed: ---------------- trunk/ trunk/plugins/perl/common/ Property changes on: trunk ___________________________________________________________________ Name: svn:ignore - config.h libtool config.status intl ABOUT-NLS compile config.guess config.sub Doxyfile ltconfig ltmain.sh install-sh missing aclocal.m4 configure config.h.in stamp-h.in Makefile.in config.log config.cache Makefile stamp-h gaim.spec depcomp stamp-h1 autom4te*.cache configure.2.1x confdefs.h *.swp win32-install-dir .temp-gettextize gaim.pc gaim.service *.apspec intltool-extract intltool-extract.in intltool-merge intltool-merge.in intltool-update intltool-update.in gaim.desktop + ABOUT-NLS aclocal.m4 autom4te.cache compile confdefs.h config.cache config.guess config.h config.h.in config.h.in~ config.log config.status config.sub configure configure.2.1x depcomp Doxyfile gaim.apspec gaim.desktop gaim.pc gaim.service gaim.spec install-sh intl intltool-extract intltool-extract.in intltool-merge intltool-merge.in intltool-update intltool-update.in libtool ltconfig ltmain.sh Makefile Makefile.in missing stamp-h stamp-h1 stamp-h.in *.swp .temp-gettextize win32-install-dir Property changes on: trunk/plugins/perl/common ___________________________________________________________________ Name: svn:ignore - *.bs *.o Makefile.PL Makefile blib lib const-c.inc const-xs.inc pm_to_blib *.c *.dll + *.bs *.o Makefile.PL Makefile Makefile.old blib lib const-c.inc const-xs.inc pm_to_blib *.c *.dll This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-06-08 01:28:18
|
Revision: 16229 Author: seanegan Date: 2006-06-07 18:03:51 -0700 (Wed, 07 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16229&view=rev Log Message: ----------- Use libxml2 for XML parsing, if available. The biggest benefit from this is actual support for XML namespaces. This fixes a handful of Google Talk integration problems, including typing notifications and buddy icons. Modified Paths: -------------- trunk/configure.ac trunk/src/Makefile.am trunk/src/gtkdialogs.c trunk/src/protocols/jabber/Makefile.am trunk/src/protocols/jabber/auth.c trunk/src/protocols/jabber/buddy.c trunk/src/protocols/jabber/chat.c trunk/src/protocols/jabber/disco.c trunk/src/protocols/jabber/iq.c trunk/src/protocols/jabber/jabber.c trunk/src/protocols/jabber/jabber.h trunk/src/protocols/jabber/message.c trunk/src/protocols/jabber/oob.c trunk/src/protocols/jabber/parser.c trunk/src/protocols/jabber/presence.c trunk/src/protocols/jabber/si.c trunk/src/protocols/jabber/xdata.c trunk/src/xmlnode.c trunk/src/xmlnode.h Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/configure.ac 2006-06-08 01:03:51 UTC (rev 16229) @@ -171,6 +171,17 @@ AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for making sounds]) fi +dnl ################# +dnl # LibXML2 +dnl ################# +enable_libxml=yes +PKG_CHECK_MODULES(LIBXML, libxml-2.0, ,enable_libxml=no) +AC_SUBST(LIBXML_CFLAGS) +AC_SUBST(LIBXML_LIBS) +if test "x$enable_libxml" = "xyes"; then + AC_DEFINE(HAVE_LIBXML, 1, [Use libxml2 for xml parsing]) +fi + dnl ####################################################################### dnl # Check for Meanwhile headers (for Sametime) dnl ####################################################################### Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/Makefile.am 2006-06-08 01:03:51 UTC (rev 16229) @@ -347,7 +347,8 @@ $(SM_LIBS) \ $(INTLLIBS) \ $(GTKSPELL_LIBS) \ - $(STARTUP_NOTIFICATION_LIBS) + $(STARTUP_NOTIFICATION_LIBS) \ + $(LIBXML_LIBS) AM_CPPFLAGS = \ -DBR_PTHREADS=0 \ @@ -361,4 +362,5 @@ $(GTK_CFLAGS) \ $(DBUS_CFLAGS) \ $(GTKSPELL_CFLAGS) \ - $(STARTUP_NOTIFICATION_CFLAGS) + $(STARTUP_NOTIFICATION_CFLAGS) \ + $(LIBXML_CFLAGS) Modified: trunk/src/gtkdialogs.c =================================================================== --- trunk/src/gtkdialogs.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/gtkdialogs.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -438,6 +438,12 @@ #endif #endif +#ifdef HAVE_LIBXML + g_string_append_printf(str, " <b>XML Parser:</b> libxml2<br/>"); +#else + g_string_append_printf(str, " <b>XML Parser:</b> GMarkup<br/>"); +#endif + #ifdef HAVE_LIBGADU #ifdef _WIN32 g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Internal<br/>"); Modified: trunk/src/protocols/jabber/Makefile.am =================================================================== --- trunk/src/protocols/jabber/Makefile.am 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/Makefile.am 2006-06-08 01:03:51 UTC (rev 16229) @@ -60,4 +60,5 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src \ $(DEBUG_CFLAGS) \ - $(GLIB_CFLAGS) + $(GLIB_CFLAGS) \ + $(LIBXML_CFLAGS) Modified: trunk/src/protocols/jabber/auth.c =================================================================== --- trunk/src/protocols/jabber/auth.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/auth.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -67,7 +67,7 @@ gchar *enc_out; auth = xmlnode_new("auth"); - xmlnode_set_attrib(auth, "xmlns", "urn:ietf:params:xml:ns:xmpp-sasl"); + xmlnode_set_namespace(auth, "urn:ietf:params:xml:ns:xmpp-sasl"); response = g_string_new(""); response = g_string_append_len(response, "\0", 1); @@ -269,7 +269,7 @@ if (js->sasl_state == SASL_CONTINUE || js->sasl_state == SASL_OK) { auth = xmlnode_new("auth"); - xmlnode_set_attrib(auth, "xmlns", "urn:ietf:params:xml:ns:xmpp-sasl"); + xmlnode_set_namespace(auth, "urn:ietf:params:xml:ns:xmpp-sasl"); xmlnode_set_attrib(auth,"mechanism", mech); if (clientout) { if (coutlen == 0) { @@ -386,7 +386,7 @@ js->auth_type = JABBER_AUTH_DIGEST_MD5; auth = xmlnode_new("auth"); - xmlnode_set_attrib(auth, "xmlns", "urn:ietf:params:xml:ns:xmpp-sasl"); + xmlnode_set_namespace(auth, "urn:ietf:params:xml:ns:xmpp-sasl"); xmlnode_set_attrib(auth, "mechanism", "DIGEST-MD5"); jabber_send(js, auth); @@ -720,7 +720,7 @@ return; } else { response = xmlnode_new("response"); - xmlnode_set_attrib(response, "xmlns", "urn:ietf:params:xml:ns:xmpp-sasl"); + xmlnode_set_namespace(response, "urn:ietf:params:xml:ns:xmpp-sasl"); if (c_out) { enc_out = gaim_base64_encode((unsigned char*)c_out, clen); xmlnode_insert_data(response, enc_out, -1); @@ -735,7 +735,7 @@ void jabber_auth_handle_success(JabberStream *js, xmlnode *packet) { - const char *ns = xmlnode_get_attrib(packet, "xmlns"); + const char *ns = xmlnode_get_namespace(packet); #ifdef HAVE_CYRUS_SASL int *x; #endif Modified: trunk/src/protocols/jabber/buddy.c =================================================================== --- trunk/src/protocols/jabber/buddy.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/buddy.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -1108,7 +1108,7 @@ xmlnode_set_attrib(iq->node, "to", jid); vcard = xmlnode_new_child(iq->node, "vCard"); - xmlnode_set_attrib(vcard, "xmlns", "vcard-temp"); + xmlnode_set_namespace(vcard, "vcard-temp"); jabber_iq_set_callback(iq, jabber_vcard_parse, jbi); jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id)); Modified: trunk/src/protocols/jabber/chat.c =================================================================== --- trunk/src/protocols/jabber/chat.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/chat.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -162,7 +162,7 @@ if(chat->muc) { xmlnode_set_attrib(message, "to", room_jid); x = xmlnode_new_child(message, "x"); - xmlnode_set_attrib(x, "xmlns", "http://jabber.org/protocol/muc#user"); + xmlnode_set_namespace(x, "http://jabber.org/protocol/muc#user"); invite = xmlnode_new_child(x, "invite"); xmlnode_set_attrib(invite, "to", name); body = xmlnode_new_child(invite, "reason"); @@ -173,7 +173,7 @@ xmlnode_insert_data(body, msg, -1); x = xmlnode_new_child(message, "x"); xmlnode_set_attrib(x, "jid", room_jid); - xmlnode_set_attrib(x, "xmlns", "jabber:x:conference"); + xmlnode_set_namespace(x, "jabber:x:conference"); } jabber_send(js, message); @@ -267,7 +267,7 @@ g_free(full_jid); x = xmlnode_new_child(presence, "x"); - xmlnode_set_attrib(x, "xmlns", "http://jabber.org/protocol/muc"); + xmlnode_set_namespace(x, "http://jabber.org/protocol/muc"); if(passwd && *passwd) { xmlnode *password = xmlnode_new_child(x, "password"); @@ -380,7 +380,7 @@ for(x = xmlnode_get_child(query, "x"); x; x = xmlnode_get_next_twin(x)) { const char *xmlns; - if(!(xmlns = xmlnode_get_attrib(x, "xmlns"))) + if(!(xmlns = xmlnode_get_namespace(x))) continue; if(!strcmp(xmlns, "jabber:x:data")) { @@ -451,7 +451,7 @@ room_jid = g_strdup_printf("%s@%s", chat->room, chat->server); xmlnode_set_attrib(iq->node, "to", room_jid); - xmlnode_set_attrib(x, "xmlns", "jabber:x:data"); + xmlnode_set_namespace(x, "jabber:x:data"); xmlnode_set_attrib(x, "type", "submit"); jabber_iq_send(iq); @@ -524,7 +524,7 @@ for(x = xmlnode_get_child(query, "x"); x; x = xmlnode_get_next_twin(x)) { const char *xmlns; - if(!(xmlns = xmlnode_get_attrib(x, "xmlns"))) + if(!(xmlns = xmlnode_get_namespace(x))) continue; if(!strcmp(xmlns, "jabber:x:data")) { Modified: trunk/src/protocols/jabber/disco.c =================================================================== --- trunk/src/protocols/jabber/disco.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/disco.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -104,7 +104,7 @@ xmlnode_set_attrib(error, "code", "404"); xmlnode_set_attrib(error, "type", "cancel"); inf = xmlnode_new_child(error, "item-not-found"); - xmlnode_set_attrib(inf, "xmlns", "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_set_namespace(inf, "urn:ietf:params:xml:ns:xmpp-stanzas"); } jabber_iq_send(iq); Modified: trunk/src/protocols/jabber/iq.c =================================================================== --- trunk/src/protocols/jabber/iq.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/iq.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -78,7 +78,7 @@ xmlnode *query; query = xmlnode_new_child(iq->node, "query"); - xmlnode_set_attrib(query, "xmlns", xmlns); + xmlnode_set_namespace(query, xmlns); return iq; } @@ -268,7 +268,7 @@ /* Apparently not, so lets see if we have a pre-defined handler */ - if(type && query && (xmlns = xmlnode_get_attrib(query, "xmlns"))) { + if(type && query && (xmlns = xmlnode_get_namespace(query))) { if(!strcmp(type, "set")) { if(!strcmp(xmlns, "jabber:iq:roster")) { jabber_roster_parse(js, packet); @@ -329,7 +329,7 @@ xmlnode_set_attrib(error, "type", "cancel"); xmlnode_set_attrib(error, "code", "501"); x = xmlnode_new_child(error, "feature-not-implemented"); - xmlnode_set_attrib(x, "xmlns", "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas"); jabber_iq_send(iq); } Modified: trunk/src/protocols/jabber/jabber.c =================================================================== --- trunk/src/protocols/jabber/jabber.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/jabber.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -63,9 +63,9 @@ "xmlns:stream='http://etherx.jabber.org/streams' " "version='1.0'>", js->user->domain); - + /* setup the parser fresh for each stream */ + jabber_parser_setup(js); jabber_send_raw(js, open_stream, -1); - g_free(open_stream); } @@ -88,7 +88,7 @@ jabber_iq_set_callback(iq, jabber_session_initialized_cb, NULL); session = xmlnode_new_child(iq->node, "session"); - xmlnode_set_attrib(session, "xmlns", "urn:ietf:params:xml:ns:xmpp-session"); + xmlnode_set_namespace(session, "urn:ietf:params:xml:ns:xmpp-session"); jabber_iq_send(iq); } @@ -137,7 +137,7 @@ xmlnode *bind, *resource; JabberIq *iq = jabber_iq_new(js, JABBER_IQ_SET); bind = xmlnode_new_child(iq->node, "bind"); - xmlnode_set_attrib(bind, "xmlns", "urn:ietf:params:xml:ns:xmpp-bind"); + xmlnode_set_namespace(bind, "urn:ietf:params:xml:ns:xmpp-bind"); resource = xmlnode_new_child(bind, "resource"); xmlnode_insert_data(resource, js->user->resource, -1); @@ -174,8 +174,14 @@ jabber_message_parse(js, packet); } else if(!strcmp(packet->name, "stream:features")) { jabber_stream_features_parse(js, packet); + } else if (!strcmp(packet->name, "features") && + !strcmp(xmlnode_get_namespace(packet), "http://etherx.jabber.org/streams")) { + jabber_stream_features_parse(js, packet); } else if(!strcmp(packet->name, "stream:error")) { jabber_stream_handle_error(js, packet); + } else if (!strcmp(packet->name, "error") && + !strcmp(xmlnode_get_namespace(packet), "http://etherx.jabber.org/streams")) { + jabber_stream_handle_error(js, packet); } else if(!strcmp(packet->name, "challenge")) { if(js->state == JABBER_STREAM_AUTHENTICATING) jabber_auth_handle_challenge(js, packet); @@ -405,7 +411,6 @@ if(js->state == JABBER_STREAM_CONNECTING) jabber_send_raw(js, "<?xml version='1.0' ?>", -1); - jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING); gaim_ssl_input_add(gsc, jabber_recv_cb_ssl, gc); } @@ -923,9 +928,10 @@ gaim_input_remove(js->gc->inpa); close(js->fd); } - +#ifndef HAVE_LIBXML if(js->context) g_markup_parse_context_free(js->context); +#endif if(js->iq_callbacks) g_hash_table_destroy(js->iq_callbacks); if(js->disco_callbacks) @@ -981,7 +987,6 @@ gaim_connection_update_progress(js->gc, _("Initializing Stream"), js->gsc ? 5 : 2, JABBER_CONNECT_STEPS); jabber_stream_init(js); - jabber_parser_setup(js); break; case JABBER_STREAM_AUTHENTICATING: gaim_connection_update_progress(js->gc, _("Authenticating"), @@ -1400,7 +1405,7 @@ { xmlnode *error; const char *code = NULL, *text = NULL; - const char *xmlns = xmlnode_get_attrib(packet, "xmlns"); + const char *xmlns = xmlnode_get_namespace(packet); char *cdata = NULL; if((error = xmlnode_get_child(packet, "error"))) { Modified: trunk/src/protocols/jabber/jabber.h =================================================================== --- trunk/src/protocols/jabber/jabber.h 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/jabber.h 2006-06-08 01:03:51 UTC (rev 16229) @@ -22,6 +22,9 @@ #ifndef _GAIM_JABBER_H_ #define _GAIM_JABBER_H_ +#ifdef HAVE_LIBXML +#include <libxml/parser.h> +#endif #include <glib.h> #include "connection.h" #include "roomlist.h" @@ -64,7 +67,11 @@ { int fd; +#ifdef HAVE_LIBXML + xmlParserCtxt *context; +#else GMarkupParseContext *context; +#endif xmlnode *current; enum { Modified: trunk/src/protocols/jabber/message.c =================================================================== --- trunk/src/protocols/jabber/message.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/message.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -123,7 +123,7 @@ for(etc = jm->etc; etc; etc = etc->next) { xmlnode *x = etc->data; - const char *xmlns = xmlnode_get_attrib(x, "xmlns"); + const char *xmlns = xmlnode_get_namespace(x); if(xmlns && !strcmp(xmlns, "jabber:x:oob")) { xmlnode *url, *desc; char *urltxt, *desctxt; @@ -325,7 +325,7 @@ g_free(code_txt); g_free(text); } else if(!strcmp(child->name, "x")) { - const char *xmlns = xmlnode_get_attrib(child, "xmlns"); + const char *xmlns = xmlnode_get_namespace(child); if(xmlns && !strcmp(xmlns, "jabber:x:event")) { if(xmlnode_get_child(child, "composing")) { if(jm->chat_state == JM_STATE_ACTIVE) @@ -440,7 +440,7 @@ if(JM_TS_JEP_0022 == (jm->typing_style & JM_TS_JEP_0022)) { child = xmlnode_new_child(message, "x"); - xmlnode_set_attrib(child, "xmlns", "jabber:x:event"); + xmlnode_set_namespace(child, "jabber:x:event"); if(jm->chat_state == JM_STATE_COMPOSING || jm->body) xmlnode_new_child(child, "composing"); } @@ -466,7 +466,7 @@ break; } if(child) - xmlnode_set_attrib(child, "xmlns", "http://jabber.org/protocol/chatstates"); + xmlnode_set_namespace(child, "http://jabber.org/protocol/chatstates"); } if(jm->subject) { Modified: trunk/src/protocols/jabber/oob.c =================================================================== --- trunk/src/protocols/jabber/oob.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/oob.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -168,11 +168,11 @@ if(!strcmp(code, "406")) { z = xmlnode_new_child(y, "not-acceptable"); xmlnode_set_attrib(y, "type", "modify"); - xmlnode_set_attrib(z, "xmlns", "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_set_namespace(z, "urn:ietf:params:xml:ns:xmpp-stanzas"); } else if(!strcmp(code, "404")) { z = xmlnode_new_child(y, "not-found"); xmlnode_set_attrib(y, "type", "cancel"); - xmlnode_set_attrib(z, "xmlns", "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_set_namespace(z, "urn:ietf:params:xml:ns:xmpp-stanzas"); } jabber_iq_send(iq); Modified: trunk/src/protocols/jabber/parser.c =================================================================== --- trunk/src/protocols/jabber/parser.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/parser.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -20,12 +20,17 @@ */ #include "internal.h" +#ifdef HAVE_LIBXML +#include <libxml/parser.h> +#endif + #include "connection.h" - +#include "debug.h" #include "jabber.h" #include "parser.h" #include "xmlnode.h" +#ifndef HAVE_LIBXML static void jabber_parser_element_start(GMarkupParseContext *context, const char *element_name, const char **attrib_names, @@ -104,6 +109,136 @@ xmlnode_insert_data(js->current, text, text_len); } +#else /* HAVE_LIBXML */ + +static void +jabber_parser_element_start_libxml(void *user_data, + const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, + int nb_namespaces, const xmlChar **namespaces, + int nb_attributes, int nb_defaulted, const xmlChar **attributes) +{ + JabberStream *js = user_data; + xmlnode *node; + int i; + + if(!element_name) { + return; + } else if(!strcmp(element_name, "stream")) { + js->protocol_version = JABBER_PROTO_0_9; + for(i=0; i < nb_attributes * 5; i += 5) { + int attrib_len = attributes[i+4] - attributes[i+3]; + char *attrib = g_malloc(attrib_len + 1); + memcpy(attrib, attributes[i+3], attrib_len); + attrib[attrib_len] = '\0'; + + if(!strcmp(attributes[i], "version") + && !strcmp(attrib, "1.0")) { + js->protocol_version = JABBER_PROTO_1_0; + } else if(!strcmp(attributes[i], "id")) { + if(js->stream_id) + g_free(js->stream_id); + js->stream_id = g_strdup(attrib); + } + g_free(attrib); + } + if(js->protocol_version == JABBER_PROTO_0_9) + js->auth_type = JABBER_AUTH_IQ_AUTH; + + if(js->state == JABBER_STREAM_INITIALIZING) + jabber_stream_set_state(js, JABBER_STREAM_AUTHENTICATING); + } else { + + if(js->current) + node = xmlnode_new_child(js->current, element_name); + else + node = xmlnode_new(element_name); + xmlnode_set_namespace(node, namespace); + + for(i=0; i < nb_attributes * 5; i+=5) { + int attrib_len = attributes[i+4] - attributes[i+3]; + char *attrib = g_malloc(attrib_len + 1); + memcpy(attrib, attributes[i+3], attrib_len); + attrib[attrib_len] = '\0'; + xmlnode_set_attrib(node, attributes[i], attrib); + g_free(attrib); + } + + js->current = node; + } +} + +static void +jabber_parser_element_end_libxml(void *user_data, const xmlChar *element_name, + const xmlChar *prefix, const xmlChar *namespace) +{ + JabberStream *js = user_data; + + if(!js->current) + return; + + if(js->current->parent) { + if(!strcmp(js->current->name, element_name)) + js->current = js->current->parent; + } else { + xmlnode *packet = js->current; + js->current = NULL; + jabber_process_packet(js, packet); + xmlnode_free(packet); + } +} + +static void +jabber_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len) +{ + JabberStream *js = user_data; + + if(!js->current) + return; + + if(!text || !text_len) + return; + + xmlnode_insert_data(js->current, text, text_len); +} +#endif /* HAVE_LIBXML */ + + +#ifdef HAVE_LIBXML +static xmlSAXHandler jabber_parser_libxml = { + .internalSubset = NULL, + .isStandalone = NULL, + .hasInternalSubset = NULL, + .hasExternalSubset = NULL, + .resolveEntity = NULL, + .getEntity = NULL, + .entityDecl = NULL, + .notationDecl = NULL, + .attributeDecl = NULL, + .elementDecl = NULL, + .unparsedEntityDecl = NULL, + .setDocumentLocator = NULL, + .startDocument = NULL, + .endDocument = NULL, + .startElement = NULL, + .endElement = NULL, + .reference = NULL, + .characters = jabber_parser_element_text_libxml, + .ignorableWhitespace = NULL, + .processingInstruction = NULL, + .comment = NULL, + .warning = NULL, + .error = NULL, + .fatalError = NULL, + .getParameterEntity = NULL, + .cdataBlock = NULL, + .externalSubset = NULL, + .initialized = XML_SAX2_MAGIC, + ._private = NULL, + .startElementNs = jabber_parser_element_start_libxml, + .endElementNs = jabber_parser_element_end_libxml, + .serror = NULL +}; +#else static GMarkupParser jabber_parser = { jabber_parser_element_start, jabber_parser_element_end, @@ -111,24 +246,47 @@ NULL, NULL }; +#endif void jabber_parser_setup(JabberStream *js) { +#ifdef HAVE_LIBXML + /* This seems backwards, but it makes sense. The libxml code creates the parser + * context when you try to use it (this way, it can figure out the encoding at + * creation time. So, setting up the parser is just a matter of destroying any + * current parser. */ + if (js->context) { + xmlParseChunk(js->context, NULL,0,1); + xmlFreeParserCtxt(js->context); + js->context = NULL; + } +#else if(!js->context) js->context = g_markup_parse_context_new(&jabber_parser, 0, js, NULL); +#endif } void jabber_parser_process(JabberStream *js, const char *buf, int len) { +#ifndef HAVE_LIBXML /* May need to check for other encodings and do the conversion here */ - if(!g_markup_parse_context_parse(js->context, buf, len, NULL)) { g_markup_parse_context_free(js->context); js->context = NULL; gaim_connection_error(js->gc, _("XML Parse error")); } +#else + if (js->context == NULL) { + /* libxml inconsistently starts parsing on creating the parser, so so a ParseChunk + * right afterwards to force it. */ + js->context = xmlCreatePushParserCtxt(&jabber_parser_libxml, js, buf, len, NULL); + xmlParseChunk(js->context, NULL, 0, 0); + } else if (xmlParseChunk(js->context, buf, len, 0) < 0) { + gaim_connection_error(js->gc, _("XML Parse error")); + } +#endif } Modified: trunk/src/protocols/jabber/presence.c =================================================================== --- trunk/src/protocols/jabber/presence.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/presence.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -121,7 +121,7 @@ if(js->avatar_hash) { x = xmlnode_new_child(presence, "x"); - xmlnode_set_attrib(x, "xmlns", "vcard-temp:x:update"); + xmlnode_set_namespace(x, "vcard-temp:x:update"); photo = xmlnode_new_child(x, "photo"); xmlnode_insert_data(photo, js->avatar_hash, -1); } @@ -167,7 +167,7 @@ /* JEP-0115 */ c = xmlnode_new_child(presence, "c"); - xmlnode_set_attrib(c, "xmlns", "http://jabber.org/protocol/caps"); + xmlnode_set_namespace(c, "http://jabber.org/protocol/caps"); xmlnode_set_attrib(c, "node", CAPS0115_NODE); xmlnode_set_attrib(c, "ver", VERSION); @@ -290,7 +290,6 @@ gboolean muc = FALSE; char *avatar_hash = NULL; - if(!(jb = jabber_buddy_find(js, from, TRUE))) return; @@ -363,7 +362,7 @@ g_free(p); } } else if(!strcmp(y->name, "x")) { - const char *xmlns = xmlnode_get_attrib(y, "xmlns"); + const char *xmlns = xmlnode_get_namespace(y); if(xmlns && !strcmp(xmlns, "jabber:x:delay")) { /* XXX: compare the time. jabber:x:delay can happen on presence packets that aren't really and truly delayed */ delayed = TRUE; @@ -464,7 +463,7 @@ for(x = xmlnode_get_child(packet, "x"); x; x = xmlnode_get_next_twin(x)) { const char *xmlns, *nick, *code; xmlnode *stat, *item; - if(!(xmlns = xmlnode_get_attrib(x, "xmlns")) || + if(!(xmlns = xmlnode_get_namespace(x)) || strcmp(xmlns, "http://jabber.org/protocol/muc#user")) continue; if(!(stat = xmlnode_get_child(x, "status"))) @@ -560,7 +559,7 @@ iq = jabber_iq_new(js, JABBER_IQ_GET); xmlnode_set_attrib(iq->node, "to", buddy_name); vcard = xmlnode_new_child(iq->node, "vCard"); - xmlnode_set_attrib(vcard, "xmlns", "vcard-temp"); + xmlnode_set_namespace(vcard, "vcard-temp"); jabber_iq_set_callback(iq, jabber_vcard_parse_avatar, NULL); jabber_iq_send(iq); Modified: trunk/src/protocols/jabber/si.c =================================================================== --- trunk/src/protocols/jabber/si.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/si.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -139,7 +139,7 @@ xmlnode_set_attrib(error, "code", "404"); xmlnode_set_attrib(error, "type", "cancel"); condition = xmlnode_new_child(error, "condition"); - xmlnode_set_attrib(condition, "xmlns", "urn:ietf:params:xml:ns:xmpp-stanzas"); + xmlnode_set_namespace(condition, "urn:ietf:params:xml:ns:xmpp-stanzas"); xmlnode_new_child(condition, "item-not-found"); jabber_iq_send(iq); @@ -637,14 +637,14 @@ iq = jabber_iq_new(jsx->js, JABBER_IQ_SET); xmlnode_set_attrib(iq->node, "to", xfer->who); si = xmlnode_new_child(iq->node, "si"); - xmlnode_set_attrib(si, "xmlns", "http://jabber.org/protocol/si"); + xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); jsx->stream_id = jabber_get_next_id(jsx->js); xmlnode_set_attrib(si, "id", jsx->stream_id); xmlnode_set_attrib(si, "profile", "http://jabber.org/protocol/si/profile/file-transfer"); file = xmlnode_new_child(si, "file"); - xmlnode_set_attrib(file, "xmlns", + xmlnode_set_namespace(file, "http://jabber.org/protocol/si/profile/file-transfer"); xmlnode_set_attrib(file, "name", xfer->filename); g_snprintf(buf, sizeof(buf), "%" G_GSIZE_FORMAT, xfer->size); @@ -652,10 +652,10 @@ /* maybe later we'll do hash and date attribs */ feature = xmlnode_new_child(si, "feature"); - xmlnode_set_attrib(feature, "xmlns", + xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); x = xmlnode_new_child(feature, "x"); - xmlnode_set_attrib(x, "xmlns", "jabber:x:data"); + xmlnode_set_namespace(x, "jabber:x:data"); xmlnode_set_attrib(x, "type", "form"); field = xmlnode_new_child(x, "field"); xmlnode_set_attrib(field, "var", "stream-method"); @@ -771,13 +771,13 @@ jsx->accepted = TRUE; si = xmlnode_new_child(iq->node, "si"); - xmlnode_set_attrib(si, "xmlns", "http://jabber.org/protocol/si"); + xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); feature = xmlnode_new_child(si, "feature"); - xmlnode_set_attrib(feature, "xmlns", "http://jabber.org/protocol/feature-neg"); + xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); x = xmlnode_new_child(feature, "x"); - xmlnode_set_attrib(x, "xmlns", "jabber:x:data"); + xmlnode_set_namespace(x, "jabber:x:data"); xmlnode_set_attrib(x, "type", "submit"); field = xmlnode_new_child(x, "field"); Modified: trunk/src/protocols/jabber/xdata.c =================================================================== --- trunk/src/protocols/jabber/xdata.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/protocols/jabber/xdata.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -49,7 +49,7 @@ JabberStream *js = data->js; GList *groups, *flds; - xmlnode_set_attrib(result, "xmlns", "jabber:x:data"); + xmlnode_set_namespace(result, "jabber:x:data"); xmlnode_set_attrib(result, "type", "submit"); for(groups = gaim_request_fields_get_groups(fields); groups; groups = groups->next) { @@ -140,7 +140,7 @@ } g_free(data); - xmlnode_set_attrib(result, "xmlns", "jabber:x:data"); + xmlnode_set_namespace(result, "jabber:x:data"); xmlnode_set_attrib(result, "type", "cancel"); cb(js, result, user_data); Modified: trunk/src/xmlnode.c =================================================================== --- trunk/src/xmlnode.c 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/xmlnode.c 2006-06-08 01:03:51 UTC (rev 16229) @@ -29,6 +29,9 @@ #include "internal.h" +#ifdef HAVE_LIBXML +#include <libxml/parser.h> +#endif #include <string.h> #include <glib.h> @@ -172,6 +175,32 @@ return NULL; } + +void xmlnode_set_namespace(xmlnode *node, const char *xmlns) +{ +#ifdef HAVE_LIBXML + g_return_if_fail(node != NULL); + + if (node->namespace) + g_free(node->namespace); + + node->namespace = g_strdup(xmlns); +#else + return xmlnode_set_attrib(node, "xmlns", xmlns); +#endif +} + +const char *xmlnode_get_namespace(xmlnode *node) +{ +#ifdef HAVE_LIBXML + g_return_val_if_fail(node != NULL, NULL); + + return node->namespace; +#else + return xmlnode_get_attrib(node, "xmlns"); +#endif +} + void xmlnode_free(xmlnode *node) { @@ -190,6 +219,10 @@ g_free(node->name); if(node->data) g_free(node->data); +#ifdef HAVE_LIBXML + if(node->namespace) + g_free(node->namespace); +#endif g_free(node); } @@ -216,7 +249,7 @@ for(x = parent->child; x; x = x->next) { const char *xmlns = NULL; if(ns) - xmlns = xmlnode_get_attrib(x, "xmlns"); + xmlns = xmlnode_get_namespace(x); if(x->type == XMLNODE_TYPE_TAG && name && !strcmp(parent_name, x->name) && (!ns || (xmlns && !strcmp(ns, xmlns)))) { @@ -272,6 +305,13 @@ node_name = g_markup_escape_text(node->name, -1); g_string_append_printf(text, "<%s", node_name); +#ifdef HAVE_LIBXML + if (node->namespace) { + char *namespace = g_markup_escape_text(node->namespace, -1); + g_string_append_printf(text, " xmlns='%s'", namespace); + g_free(namespace); + } +#endif for(c = node->child; c; c = c->next) { if(c->type == XMLNODE_TYPE_ATTRIB) { @@ -347,7 +387,72 @@ xmlnode *current; }; +#ifdef HAVE_LIBXML static void +xmlnode_parser_element_start_libxml(void *user_data, + const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, + int nb_namespaces, const xmlChar **namespaces, + int nb_attributes, int nb_defaulted, const xmlChar **attributes) +{ + struct _xmlnode_parser_data *xpd = user_data; + xmlnode *node; + int i; + + if(!element_name) { + return; + } else { + if(xpd->current) + node = xmlnode_new_child(xpd->current, element_name); + else + node = xmlnode_new(element_name); + + xmlnode_set_namespace(node, namespace); + + for(i=0; i < nb_attributes * 5; i+=5) { + int attrib_len = attributes[i+4] - attributes[i+3]; + char *attrib = g_malloc(attrib_len + 1); + memcpy(attrib, attributes[i+3], attrib_len); + attrib[attrib_len] = '\0'; + xmlnode_set_attrib(node, attributes[i], attrib); + g_free(attrib); + } + + xpd->current = node; + } +} + +static void +xmlnode_parser_element_end_libxml(void *user_data, const xmlChar *element_name, + const xmlChar *prefix, const xmlChar *namespace) +{ + struct _xmlnode_parser_data *xpd = user_data; + + if(!element_name || !xpd->current) + return; + + if(xpd->current->parent) { + if(!strcmp(xpd->current->name, element_name)) + xpd->current = xpd->current->parent; + } +} + +static void +xmlnode_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len) +{ + struct _xmlnode_parser_data *xpd = user_data; + + if(!xpd->current) + return; + + if(!text || !text_len) + return; + + xmlnode_insert_data(xpd->current, text, text_len); +} + +#else + +static void xmlnode_parser_element_start(GMarkupParseContext *context, const char *element_name, const char **attrib_names, const char **attrib_values, gpointer user_data, GError **error) @@ -400,7 +505,44 @@ xmlnode_insert_data(xpd->current, text, text_len); } +#endif +#ifdef HAVE_LIBXML +static xmlSAXHandler xmlnode_parser_libxml = { + .internalSubset = NULL, + .isStandalone = NULL, + .hasInternalSubset = NULL, + .hasExternalSubset = NULL, + .resolveEntity = NULL, + .getEntity = NULL, + .entityDecl = NULL, + .notationDecl = NULL, + .attributeDecl = NULL, + .elementDecl = NULL, + .unparsedEntityDecl = NULL, + .setDocumentLocator = NULL, + .startDocument = NULL, + .endDocument = NULL, + .startElement = NULL, + .endElement = NULL, + .reference = NULL, + .characters = xmlnode_parser_element_text_libxml, + .ignorableWhitespace = NULL, + .processingInstruction = NULL, + .comment = NULL, + .warning = NULL, + .error = NULL, + .fatalError = NULL, + .getParameterEntity = NULL, + .cdataBlock = NULL, + .externalSubset = NULL, + .initialized = XML_SAX2_MAGIC, + ._private = NULL, + .startElementNs = xmlnode_parser_element_start_libxml, + .endElementNs = xmlnode_parser_element_end_libxml, + .serror = NULL +}; +#else static GMarkupParser xmlnode_parser = { xmlnode_parser_element_start, xmlnode_parser_element_end, @@ -408,8 +550,8 @@ NULL, NULL }; +#endif - xmlnode * xmlnode_from_str(const char *str, gssize size) { @@ -422,6 +564,16 @@ real_size = size < 0 ? strlen(str) : size; xpd = g_new0(struct _xmlnode_parser_data, 1); + +#ifdef HAVE_LIBXML + if (xmlSAXUserParseMemory(&xmlnode_parser_libxml, xpd, str, size) < 0) { + while(xpd->current && xpd->current->parent) + xpd->current = xpd->current->parent; + if(xpd->current) + xmlnode_free(xpd->current); + xpd->current = NULL; + } +#else context = g_markup_parse_context_new(&xmlnode_parser, 0, xpd, NULL); if(!g_markup_parse_context_parse(context, str, real_size, NULL)) { @@ -432,7 +584,7 @@ xpd->current = NULL; } g_markup_parse_context_free(context); - +#endif ret = xpd->current; g_free(xpd); return ret; @@ -477,7 +629,7 @@ xmlnode_get_next_twin(xmlnode *node) { xmlnode *sibling; - const char *ns = xmlnode_get_attrib(node, "xmlns"); + const char *ns = xmlnode_get_namespace(node); g_return_val_if_fail(node != NULL, NULL); g_return_val_if_fail(node->type == XMLNODE_TYPE_TAG, NULL); @@ -485,7 +637,7 @@ for(sibling = node->next; sibling; sibling = sibling->next) { const char *xmlns = NULL; if(ns) - xmlns = xmlnode_get_attrib(sibling, "xmlns"); + xmlns = xmlnode_get_namespace(sibling); if(sibling->type == XMLNODE_TYPE_TAG && !strcmp(node->name, sibling->name) && (!ns || (xmlns && !strcmp(ns, xmlns)))) Modified: trunk/src/xmlnode.h =================================================================== --- trunk/src/xmlnode.h 2006-06-07 15:58:27 UTC (rev 16228) +++ trunk/src/xmlnode.h 2006-06-08 01:03:51 UTC (rev 16229) @@ -41,6 +41,9 @@ typedef struct _xmlnode { char *name; /**< The name of the node. */ +#ifdef HAVE_LIBXML + char *namespace; /**< The namespace of the node */ +#endif XMLNodeType type; /**< The type of the node. */ char *data; /**< The data for the node. */ size_t data_sz; /**< The size of the data. */ @@ -154,6 +157,22 @@ void xmlnode_remove_attrib(xmlnode *node, const char *attr); /** + * Sets the namespace of a node + * + * @param node The node to qualify + * @param xmlns The namespace of the node + */ +void xmlnode_set_namespace(xmlnode *node, const char *xmlns); + +/** + * Returns the namespace of a node + * + * @param node The node to get the namepsace from + * @return The namespace of this node + */ +const char *xmlnode_get_namespace(xmlnode *node); + +/** * Returns the node in a string of xml. * * @param node The starting node to output. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-06-08 15:13:47
|
Revision: 16234 Author: datallah Date: 2006-06-08 08:13:39 -0700 (Thu, 08 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16234&view=rev Log Message: ----------- Use libxml2 on win32 too. This increases the installer size by ~400K (oh well). Modified Paths: -------------- trunk/Makefile.mingw trunk/config.h.mingw trunk/gaim-installer.nsi trunk/src/Makefile.mingw trunk/src/protocols/jabber/Makefile.mingw Modified: trunk/Makefile.mingw =================================================================== --- trunk/Makefile.mingw 2006-06-08 04:55:11 UTC (rev 16233) +++ trunk/Makefile.mingw 2006-06-08 15:13:39 UTC (rev 16234) @@ -12,6 +12,7 @@ GAIM_SOUNDS = ./sounds GAIM_INSTALL_DIR = ./win32-install-dir GTKSPELL_TOP = ../win32-dev/gtkspell-2.0.6/gtkspell +LIBXML2_DIR = ../win32-dev/libxml2 IDLETRACK_TOP = $(GAIM_SRC)/win32/IdleTracker GTKRC_TOP = ../win32-dev/gtkrc OSCAR = $(GAIM_PROTOS)/oscar @@ -33,7 +34,8 @@ VERSION := $(shell cat ./VERSION) NEEDED_DLLS = $(GTKSPELL_TOP)/libgtkspell.dll \ - $(IDLETRACK_TOP)/idletrack.dll + $(IDLETRACK_TOP)/idletrack.dll \ + $(LIBXML2_DIR)/bin/libxml2.dll SOUNDS = $(GAIM_SOUNDS)/alert.wav \ $(GAIM_SOUNDS)/login.wav \ Modified: trunk/config.h.mingw =================================================================== --- trunk/config.h.mingw 2006-06-08 04:55:11 UTC (rev 16233) +++ trunk/config.h.mingw 2006-06-08 15:13:39 UTC (rev 16234) @@ -635,6 +635,8 @@ <inttypes.h> don't define. */ /* #undef uintmax_t */ +#define HAVE_LIBXML 1 + /* * Following are added for Win32 version of Gaim */ Modified: trunk/gaim-installer.nsi =================================================================== --- trunk/gaim-installer.nsi 2006-06-08 04:55:11 UTC (rev 16233) +++ trunk/gaim-installer.nsi 2006-06-08 15:13:39 UTC (rev 16234) @@ -744,6 +744,7 @@ Delete "$INSTDIR\idletrack.dll" Delete "$INSTDIR\libgtkspell.dll" Delete "$INSTDIR\libmeanwhile-1.dll" + Delete "$INSTDIR\libxml2.dll" Delete "$INSTDIR\nspr4.dll" Delete "$INSTDIR\nss3.dll" Delete "$INSTDIR\nssckbi.dll" Modified: trunk/src/Makefile.mingw =================================================================== --- trunk/src/Makefile.mingw 2006-06-08 04:55:11 UTC (rev 16233) +++ trunk/src/Makefile.mingw 2006-06-08 15:13:39 UTC (rev 16234) @@ -18,6 +18,7 @@ GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir NSS_DIR := ../../win32-dev/nss-3.9 NSPR_DIR := ../../win32-dev/nspr-4.4.1 +LIBXML2_DIR := ../../win32-dev/libxml2 ## ## VARIABLE DEFINITIONS @@ -66,7 +67,8 @@ -I$(ASPELL_TOP)/include \ -I$(GTKSPELL_TOP) \ -I$(NSS_DIR)/include \ - -I$(NSPR_DIR)/include + -I$(NSPR_DIR)/include \ + -I$(LIBXML2_DIR)/include LIB_PATHS = -L$(GTK_TOP)/lib \ @@ -74,7 +76,8 @@ -L$(IDLETRACK_TOP) \ -L$(ASPELL_TOP)/lib \ -L$(NSS_DIR)/lib \ - -L$(NSPR_DIR)/lib + -L$(NSPR_DIR)/lib \ + -L$(LIBXML2_DIR)/lib ## ## SOURCES, OBJECTS @@ -191,8 +194,8 @@ -lidletrack \ -lnss3 \ -lnspr4 \ - -lssl3 - + -lssl3 \ + -lxml2 EXE_LIBS = Modified: trunk/src/protocols/jabber/Makefile.mingw =================================================================== --- trunk/src/protocols/jabber/Makefile.mingw 2006-06-08 04:55:11 UTC (rev 16233) +++ trunk/src/protocols/jabber/Makefile.mingw 2006-06-08 15:13:39 UTC (rev 16234) @@ -10,6 +10,7 @@ INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 +LIBXML2_DIR:= ../../../../win32-dev/libxml2 GAIM_TOP := ../../.. JABBER_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir @@ -50,18 +51,16 @@ INCLUDE_PATHS += -I$(JABBER_ROOT) \ -I$(JABBER_ROOT)/win32 \ -I$(GTK_TOP)/include \ - -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ - -I$(GTK_TOP)/include/pango-1.0 \ - -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(GTK_TOP)/lib/gtk-2.0/include \ + -I$(LIBXML2_DIR)/include \ -I$(GAIM_TOP)/src \ -I$(GAIM_TOP)/src/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ + -L$(LIBXML2_DIR)/lib \ -L$(GAIM_TOP)/src @@ -93,11 +92,9 @@ ## LIBRARIES ## -LIBS = -lgtk-win32-2.0 \ +LIBS = \ -lglib-2.0 \ - -lgdk-win32-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ + -lxml2 \ -lws2_32 \ -lintl \ -lgaim This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-06-19 05:57:18
|
Revision: 16283 Author: rlaager Date: 2006-06-18 22:57:11 -0700 (Sun, 18 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16283&view=rev Log Message: ----------- SF Patch #1500688 from Brian Chu (roast) He already committed this to his soc-2006-file-loggers branch. Here's the patch description: In util.c, gaim_markup_html_to_xhtml() doesn't trim spaces of parsed background colors, parsed font names, or the end result for styles (which inserted spaces for the purpose of many span.style attributes). For example, things like this get written to the log: <span style='font-size: small; '> Things like the following this _can_ written to the log given a tag like this: <font face=" Comic Sans MS "> <span style='font-family: Comic Sans MS ; '> Same for: <body bgcolor=" Red "> <span style='background: Red ;'> Modified Paths: -------------- trunk/COPYRIGHT trunk/src/util.c Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-06-19 05:39:30 UTC (rev 16282) +++ trunk/COPYRIGHT 2006-06-19 05:57:11 UTC (rev 16283) @@ -51,6 +51,7 @@ Christophe Chapuis Ka-Hing Cheung Sadrul Habib Chowdhury +Brian Chu Arturo Cisneros, Jr. Vincas Ciziunas Jonathan Clark Modified: trunk/src/util.c =================================================================== --- trunk/src/util.c 2006-06-19 05:39:30 UTC (rev 16282) +++ trunk/src/util.c 2006-06-19 05:57:11 UTC (rev 16283) @@ -1342,7 +1342,7 @@ face = g_string_append_c(face, *q); q++; } - g_string_append_printf(style, "font-family: %s; ", face->str); + g_string_append_printf(style, "font-family: %s; ", g_strstrip(face->str)); g_string_free(face, TRUE); p = q; } else if(!g_ascii_strncasecmp(p, "size=", strlen("size="))) { @@ -1392,7 +1392,7 @@ pt->dest_tag = "span"; tags = g_list_prepend(tags, pt); if(style->len) - g_string_append_printf(xhtml, "<span style='%s'>", style->str); + g_string_append_printf(xhtml, "<span style='%s'>", g_strstrip(style->str)); else pt->ignore = TRUE; g_string_free(style, TRUE); @@ -1412,7 +1412,7 @@ color = g_string_append_c(color, *q); q++; } - g_string_append_printf(xhtml, "<span style='background: %s;'>", color->str); + g_string_append_printf(xhtml, "<span style='background: %s;'>", g_strstrip(color->str)); g_string_free(color, TRUE); if ((c = strchr(c, '>')) != NULL) c++; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-06-22 08:34:17
|
Revision: 16308 Author: sadrul Date: 2006-06-22 01:33:54 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16308&view=rev Log Message: ----------- This is my first commit here. So don't yell at me if things get borked. Also, I haven't looked at the auto-thingies yet. So don't puke at the Makefiles. Files in console/libgnt/ are for the 'Gaim/GObjectified Ncurses Toolkit' library. Files in console/ uses libgaim and libgnt. Currently, only the buddylist-ui is 'functional', ie. the buddy-list updates when someone logs on or logs off. It still needs a lot of work. Added Paths: ----------- trunk/console/ trunk/console/Makefile trunk/console/gntblist.c trunk/console/gntblist.h trunk/console/gntgaim.c trunk/console/gntgaim.h trunk/console/gntui.c trunk/console/gntui.h trunk/console/libgnt/ trunk/console/libgnt/Makefile trunk/console/libgnt/gnt-skel.c trunk/console/libgnt/gnt-skel.h trunk/console/libgnt/gnt.h trunk/console/libgnt/gntbox.c trunk/console/libgnt/gntbox.h trunk/console/libgnt/gntbutton.c trunk/console/libgnt/gntbutton.h trunk/console/libgnt/gntcolors.c trunk/console/libgnt/gntcolors.h trunk/console/libgnt/gntkeys.h trunk/console/libgnt/gntlabel.c trunk/console/libgnt/gntlabel.h trunk/console/libgnt/gntmain.c trunk/console/libgnt/gnttree.c trunk/console/libgnt/gnttree.h trunk/console/libgnt/gntutils.c trunk/console/libgnt/gntutils.h trunk/console/libgnt/gntwidget.c trunk/console/libgnt/gntwidget.h trunk/console/libgnt/test.c Added: trunk/console/Makefile =================================================================== --- trunk/console/Makefile (rev 0) +++ trunk/console/Makefile 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,27 @@ +CFLAGS=`pkg-config --cflags gaim gobject-2.0` -g -I./libgnt/ +LDFLAGS=`pkg-config --libs gaim gobject-2.0 gthread-2.0 libxml-2.0` -lncursesw -L./libgnt/ -lgnt + +GG_SOURCES = \ + gntblist.c \ + gntui.c + +GG_HEADERS = \ + gntblist.h \ + gntui.h + +GG_OBJECTS = \ + gntblist.o \ + gntui.o + +all: gntgaim + +gntgaim: gntgaim.o $(GG_OBJECTS) + $(CC) -o gntgaim gntgaim.o $(GG_OBJECTS) $(LDFLAGS) +gntblist.o: gntblist.c $(GG_HEADERS) +gntgaim.o: gntgaim.c gntgaim.h $(GG_HEADERS) +gntui.o: gntui.c $(GG_HEADERS) + +clean: + rm *.o + rm gntgaim + Property changes on: trunk/console/Makefile ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c (rev 0) +++ trunk/console/gntblist.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,121 @@ +#include <gaim/account.h> +#include <gaim/blist.h> +#include <signal.h> +#include <gaim/util.h> +#include <gaim/server.h> + +#include "gntgaim.h" +#include "gntbox.h" +#include "gnttree.h" + +#define TAB_SIZE 3 + +/** + * NOTES: + * + * 1. signal-callbacks should check for module_in_focus() before redrawing anything. + * 2. call module_lost_focus() before opening a new window, and module_gained_focus() when + * the new window is closed. This is to make sure the signal callbacks don't screw up + * the display. + */ + +static GaimBlistUiOps blist_ui_ops = +{ + NULL, + NULL, + NULL, + NULL, /* This doesn't do crap */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +typedef struct +{ + GntWidget *window; + GntWidget *tree; +} GGBlist; + +GGBlist *ggblist; + +static gpointer +gg_blist_get_handle() +{ + static int handle; + + return &handle; +} + +static void +add_group(GaimGroup *group, GGBlist *ggblist) +{ + GaimBlistNode *node = (GaimBlistNode *)group; + if (node->ui_data) + return; + gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, + group->name, NULL, NULL); + node->ui_data = GINT_TO_POINTER(TRUE); +} + +static void +buddy_signed_on(GaimBuddy *buddy, GGBlist *ggblist) +{ + GaimGroup *group = gaim_buddy_get_group(buddy); + char *text; + + add_group(group, ggblist); + + text = g_strdup_printf("%*s%s", TAB_SIZE, "", gaim_buddy_get_alias(buddy)); + gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, text, group, NULL); + g_free(text); +} + +static void +buddy_signed_off(GaimBuddy *buddy, GGBlist *ggblist) +{ + gnt_tree_remove(GNT_TREE(ggblist->tree), buddy); +} + +GaimBlistUiOps *gg_get_blist_ui_ops() +{ + return &blist_ui_ops; +} + +static void +selection_activate(GntWidget *widget, GGBlist *ggblist) +{ + gnt_widget_set_focus(widget, FALSE); +} + +void gg_blist_init() +{ + ggblist = g_new0(GGBlist, 1); + + ggblist->window = gnt_box_new(FALSE, FALSE); + gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); + + ggblist->tree = gnt_tree_new(); + gnt_widget_set_size(ggblist->tree, 25, getmaxy(stdscr)); + + gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); + gnt_widget_show(ggblist->window); + + gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gg_blist_get_handle(), + GAIM_CALLBACK(buddy_signed_on), ggblist); + gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-off", gg_blist_get_handle(), + GAIM_CALLBACK(buddy_signed_off), ggblist); + + g_signal_connect(G_OBJECT(ggblist->tree), "activate", G_CALLBACK(selection_activate), ggblist); + + /*gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", gg_blist_get_handle(),*/ + /*GAIM_CALLBACK(received_im_msg), list);*/ + /*gaim_signal_connect(gaim_conversations_get_handle(), "sent-im-msg", gg_blist_get_handle(),*/ + /*GAIM_CALLBACK(sent_im_msg), NULL);*/ + + /*gaim_signal_connect(gaim_conversations_get_handle(), "received-chat-msg", gg_blist_get_handle(),*/ + /*GAIM_CALLBACK(received_chat_msg), list);*/ +} + Property changes on: trunk/console/gntblist.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/gntblist.h =================================================================== --- trunk/console/gntblist.h (rev 0) +++ trunk/console/gntblist.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,5 @@ +#include "blist.h" + +GaimBlistUiOps * gg_get_blist_ui_ops(); + +void gg_blist_init(); Property changes on: trunk/console/gntblist.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/gntgaim.c =================================================================== --- trunk/console/gntgaim.c (rev 0) +++ trunk/console/gntgaim.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,193 @@ +#include "account.h" +#include "conversation.h" +#include "core.h" +#include "debug.h" +#include "eventloop.h" +#include "ft.h" +#include "log.h" +#include "notify.h" +#include "prefs.h" +#include "prpl.h" +#include "pounce.h" +#include "savedstatuses.h" +#include "sound.h" +#include "status.h" +#include "util.h" +#include "whiteboard.h" + +#include "gntgaim.h" + +/* Anything IO-related is directly copied from gtkgaim's source tree */ + +static GaimCoreUiOps core_ops = +{ + NULL, /*gaim_gtk_prefs_init,*/ + NULL, /*debug_init,*/ + NULL, /*gaim_gtk_ui_init,*/ + NULL, /*gaim_gtk_quit*/ +}; + +static GaimCoreUiOps * +gnt_core_get_ui_ops() +{ + return &core_ops; +} + +#define GAIM_GTK_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR) +#define GAIM_GTK_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL) + +typedef struct _GaimGtkIOClosure { + GaimInputFunction function; + guint result; + gpointer data; + +} GaimGtkIOClosure; + +static void gaim_gtk_io_destroy(gpointer data) +{ + g_free(data); +} + +static gboolean gaim_gtk_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data) +{ + GaimGtkIOClosure *closure = data; + GaimInputCondition gaim_cond = 0; + + if (condition & GAIM_GTK_READ_COND) + gaim_cond |= GAIM_INPUT_READ; + if (condition & GAIM_GTK_WRITE_COND) + gaim_cond |= GAIM_INPUT_WRITE; + +#if 0 + gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop", + "CLOSURE: callback for %d, fd is %d\n", + closure->result, g_io_channel_unix_get_fd(source)); +#endif + +#ifdef _WIN32 + if(! gaim_cond) { +#if DEBUG + gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop", + "CLOSURE received GIOCondition of 0x%x, which does not" + " match 0x%x (READ) or 0x%x (WRITE)\n", + condition, GAIM_GTK_READ_COND, GAIM_GTK_WRITE_COND); +#endif /* DEBUG */ + + return TRUE; + } +#endif /* _WIN32 */ + + closure->function(closure->data, g_io_channel_unix_get_fd(source), + gaim_cond); + + return TRUE; +} + +static guint gnt_input_add(gint fd, GaimInputCondition condition, GaimInputFunction function, + gpointer data) +{ + GaimGtkIOClosure *closure = g_new0(GaimGtkIOClosure, 1); + GIOChannel *channel; + GIOCondition cond = 0; + + closure->function = function; + closure->data = data; + + if (condition & GAIM_INPUT_READ) + cond |= GAIM_GTK_READ_COND; + if (condition & GAIM_INPUT_WRITE) + cond |= GAIM_GTK_WRITE_COND; + + channel = g_io_channel_unix_new(fd); + closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, + gaim_gtk_io_invoke, closure, gaim_gtk_io_destroy); + +#if 0 + gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop", + "CLOSURE: adding input watcher %d for fd %d\n", + closure->result, fd); +#endif + + g_io_channel_unref(channel); + return closure->result; +} + +static GaimEventLoopUiOps eventloop_ops = +{ + g_timeout_add, + (guint (*)(guint))g_source_remove, + gnt_input_add, + (guint (*)(guint))g_source_remove +}; + +GaimEventLoopUiOps * +gnt_eventloop_get_ui_ops(void) +{ + return &eventloop_ops; +} + +/* This is mostly copied from gtkgaim's source tree */ +static void +init_libgaim() +{ + char *path; + + gaim_debug_set_enabled(FALSE); + + gaim_core_set_ui_ops(gnt_core_get_ui_ops()); + gaim_eventloop_set_ui_ops(gnt_eventloop_get_ui_ops()); + + gaim_util_set_user_dir("/tmp/tmp/"); /* XXX: */ + + path = g_build_filename(gaim_user_dir(), "plugins", NULL); + gaim_plugins_add_search_path(path); + g_free(path); + gaim_plugins_add_search_path("/usr/local/lib/gaim"); /* XXX: */ + + if (!gaim_core_init(GAIM_GNT_UI)) + { + fprintf(stderr, "OOPSSS!!\n"); + abort(); + } + + /* TODO: Move blist loading into gaim_blist_init() */ + gaim_set_blist(gaim_blist_new()); + gaim_blist_load(); + + /* TODO: Move prefs loading into gaim_prefs_init() */ + gaim_prefs_load(); + gaim_prefs_update_old(); + + /* load plugins we had when we quit */ + gaim_plugins_load_saved("/gaim/gtk/plugins/loaded"); + + /* TODO: Move pounces loading into gaim_pounces_init() */ + gaim_pounces_load(); + +} + +int main(int argc, char **argv) +{ + GMainLoop *loop; + + /* Initialize the libgaim stuff */ + init_libgaim(); + + /* Connect to the signals */ + + /* Enable the accounts and restore the status */ + gaim_accounts_restore_current_statuses(); + + /* Main loop */ + g_thread_init(NULL); + loop = g_main_loop_new(NULL, TRUE); + g_thread_create((GThreadFunc)g_main_loop_run, loop, FALSE, NULL); + + /* Initialize the UI */ + init_gnt_ui(); + + gaim_core_quit(); + + return 0; +} + Property changes on: trunk/console/gntgaim.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/gntgaim.h =================================================================== --- trunk/console/gntgaim.h (rev 0) +++ trunk/console/gntgaim.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,5 @@ +#include <glib.h> + +#define GAIM_GNT_UI "gnt-gaim" + +#define _(x) x Property changes on: trunk/console/gntgaim.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/gntui.c =================================================================== --- trunk/console/gntui.c (rev 0) +++ trunk/console/gntui.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,18 @@ +#include "gntui.h" + +void init_gnt_ui() +{ + gnt_init(); + + wbkgdset(stdscr, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); + werase(stdscr); + /*box(stdscr, ACS_VLINE, ACS_HLINE);*/ + wrefresh(stdscr); + + /* Initialize the buddy list */ + gg_blist_init(); + gaim_blist_set_ui_ops(gg_get_blist_ui_ops()); + + gnt_main(); +} + Property changes on: trunk/console/gntui.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/gntui.h =================================================================== --- trunk/console/gntui.h (rev 0) +++ trunk/console/gntui.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,3 @@ +#include "gnt.h" + +void init_gnt_ui(); Property changes on: trunk/console/gntui.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/Makefile =================================================================== --- trunk/console/libgnt/Makefile (rev 0) +++ trunk/console/libgnt/Makefile 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,53 @@ +CFLAGS=`pkg-config --cflags gobject-2.0` -g +LDFLAGS=`pkg-config --libs gobject-2.0` -lncursesw + +HEADERS = \ + gntwidget.h \ + gntbox.h \ + gntbutton.h \ + gntcolors.h \ + gntlabel.h \ + gnttree.h \ + gntutils.h \ + gnt.h + +SOURCES = \ + gntwidget.c \ + gntbox.c \ + gntbutton.c \ + gntcolors.c \ + gntlabel.c \ + gnttree.c \ + gntutils.c \ + gntmain.c + +OBJECTS = \ + gntwidget.o \ + gntbox.o \ + gntbutton.o \ + gntcolors.o \ + gntlabel.o \ + gnttree.o \ + gntutils.o \ + gntmain.o + +all: libgnt + +test: $(OBJECTS) + +gntwidget.o: gntwidget.c $(HEADERS) +gntbox.o: gntbox.c $(HEADERS) +gntbutton.o: gntbutton.c $(HEADERS) +gntcolors.o: gntcolors.c $(HEADERS) +gntlabel.o: gntlabel.c $(HEADERS) +gnttree.o: gnttree.c $(HEADERS) +gntutils.o: gntutils.c $(HEADERS) +gntmain.o: gntmain.c $(HEADERS) + +libgnt: $(OBJECTS) + $(CC) --shared -o libgnt.so $(OBJECTS) + +clean: + rm *.o + rm libgnt.so + Property changes on: trunk/console/libgnt/Makefile ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gnt-skel.c =================================================================== --- trunk/console/libgnt/gnt-skel.c (rev 0) +++ trunk/console/libgnt/gnt-skel.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,93 @@ +#include "gn-skel.h" + +enum +{ + SIGS = 1, +}; + +static GntWidgetClass *parent_class = NULL; +static guint signals[SIGS] = { 0 }; + +static void +gnt_skel_draw(GntWidget *widget) +{ + DEBUG; +} + +static void +gnt_skel_size_request(GntWidget *widget) +{ +} + +static void +gnt_skel_map(GntWidget *widget) +{ + if (widget->priv.width == 0 || widget->priv.height == 0) + gnt_widget_size_request(widget); + DEBUG; +} + +static gboolean +gnt_skel_key_pressed(GntWidget *widget, const char *text) +{ + return FALSE; +} + +static void +gnt_skel_class_init(GntWidgetClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = GNT_WIDGET_CLASS(klass); + parent_class->draw = gnt_skel_draw; + parent_class->map = gnt_skel_map; + parent_class->size_request = gnt_skel_size_request; + parent_class->key_pressed = gnt_skel_key_pressed; + + DEBUG; +} + +static void +gnt_skel_init(GTypeInstance *instance, gpointer class) +{ + DEBUG; +} + +/****************************************************************************** + * GntSkel API + *****************************************************************************/ +GType +gnt_skel_get_gtype(void) +{ + static GType type = 0; + + if(type == 0) + { + static const GTypeInfo info = { + sizeof(GntSkelClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)gnt_skel_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(GntSkel), + 0, /* n_preallocs */ + gnt_skel_init, /* instance_init */ + }; + + type = g_type_register_static(GNT_TYPE_WIDGET, + "GntSkel", + &info, 0); + } + + return type; +} + +GntWidget *gnt_skel_new() +{ + GntWidget *widget = g_object_new(GNT_TYPE_SKEL, NULL); + GntSkel *skel = GNT_SKEL(widget); + + return widget; +} + Property changes on: trunk/console/libgnt/gnt-skel.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gnt-skel.h =================================================================== --- trunk/console/libgnt/gnt-skel.h (rev 0) +++ trunk/console/libgnt/gnt-skel.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,47 @@ +#ifndef GNT_SKEL_H +#define GNT_SKEL_H + +#include "gnwidget.h" +#include "gn.h" +#include "gncolors.h" +#include "gnkeys.h" + +#define GNT_TYPE_SKEL (gnt_skel_get_gtype()) +#define GNT_SKEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_SKEL, GntSkel)) +#define GNT_SKEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_SKEL, GntSkelClass)) +#define GNT_IS_SKEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_SKEL)) +#define GNT_IS_SKEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_SKEL)) +#define GNT_SKEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_SKEL, GntSkelClass)) + +#define GNT_SKEL_FLAGS(obj) (GNT_SKEL(obj)->priv.flags) +#define GNT_SKEL_SET_FLAGS(obj, flags) (GNT_SKEL_FLAGS(obj) |= flags) +#define GNT_SKEL_UNSET_FLAGS(obj, flags) (GNT_SKEL_FLAGS(obj) &= ~(flags)) + +typedef struct _GnSkel GntSkel; +typedef struct _GnSkelPriv GntSkelPriv; +typedef struct _GnSkelClass GntSkelClass; + +struct _GnSkel +{ + GntWidget parent; +}; + +struct _GnSkelClass +{ + GntWidgetClass parent; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +G_BEGIN_DECLS + +GType gnt_skel_get_gtype(void); + +GntWidget *gnt_skel_new(); + +G_END_DECLS + +#endif /* GNT_SKEL_H */ Property changes on: trunk/console/libgnt/gnt-skel.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gnt.h =================================================================== --- trunk/console/libgnt/gnt.h (rev 0) +++ trunk/console/libgnt/gnt.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,17 @@ +#include <glib.h> +#include "gntwidget.h" +#include "gntcolors.h" +#include "gntkeys.h" + +/* XXX: Find a better place for this */ +#define SCROLL_HEIGHT 4096 +#define SCROLL_WIDTH 512 + +void gnt_init(); + +void gnt_main(); + +void gnt_screen_take_focus(GntWidget *widget); + +void gnt_screen_remove_widget(GntWidget *widget); + Property changes on: trunk/console/libgnt/gnt.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntbox.c =================================================================== --- trunk/console/libgnt/gntbox.c (rev 0) +++ trunk/console/libgnt/gntbox.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,323 @@ +#include "gntbox.h" + +enum +{ + SIGS = 1, +}; + +static GntWidgetClass *parent_class = NULL; +static guint signals[SIGS] = { 0 }; + +static void +gnt_box_draw(GntWidget *widget) +{ + GntBox *box = GNT_BOX(widget); + GList *iter; + + for (iter = box->list; iter; iter = iter->next) + { + gnt_widget_draw(GNT_WIDGET(iter->data)); + } + + if (box->title) + { + gchar *title = g_strdup(box->title); + int pos = g_utf8_strlen(title, -1); + + if (pos >= widget->priv.width - 2) + { + g_utf8_strncpy(title, box->title, widget->priv.width - 2); + pos = 1; + } + else + { + pos = (widget->priv.width - pos - 2) / 2; + /*pos = 2;*/ + } + wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_TITLE)); + mvwprintw(widget->window, 0, pos, title); + g_free(title); + } + wrefresh(widget->window); + + DEBUG; +} + +static void +reposition_children(GntWidget *widget) +{ + GList *iter; + GntBox *box = GNT_BOX(widget); + int w, h, curx, cury, max; + gboolean has_border = FALSE; + int x, y; + + x = widget->priv.x; + y = widget->priv.y; + w = h = 0; + max = -1; + curx = widget->priv.x; + cury = widget->priv.y; + if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_BORDER)) + { + has_border = TRUE; + curx += 1; + cury += 1; + if (!box->vertical) + curx++; + } + + for (iter = box->list; iter; iter = iter->next) + { + gnt_widget_set_position(GNT_WIDGET(iter->data), curx, cury); + gnt_widget_get_size(GNT_WIDGET(iter->data), &w, &h); + if (box->vertical) + { + cury += h + 1; + if (max < w) + max = w; + } + else + { + curx += w + 2; + if (max < h) + max = h; + } + } + + if (has_border) + { + curx += 2; + cury += 1; + max += 2; + } + + if (box->vertical) + { + widget->priv.width = max; + widget->priv.height = cury - widget->priv.y; + } + else + { + widget->priv.width = curx - widget->priv.x; + widget->priv.height = max; + } +} + +static void +gnt_box_set_position(GntWidget *widget, int x, int y) +{ + gnt_widget_size_request(widget); + reposition_children(widget); +} + +static void +gnt_box_size_request(GntWidget *widget) +{ + GntBox *box = GNT_BOX(widget); + GList *iter; + + g_list_foreach(box->list, (GFunc)gnt_widget_size_request, NULL); + + if (box->homogeneous) + { + int max = -1, w, h; + + /* XXX: should probably be changed based on vertical-ness */ + for (iter = box->list; iter; iter = iter->next) + { + gnt_widget_get_size(GNT_WIDGET(iter->data), &w, NULL); + if (max < w) + max = w; + } + + for (iter = box->list; iter; iter = iter->next) + { + gnt_widget_get_size(GNT_WIDGET(iter->data), NULL, &h); + gnt_widget_set_size(GNT_WIDGET(iter->data), max, h); + } + } + + reposition_children(widget); +} + +static void +gnt_box_map(GntWidget *widget) +{ + if (widget->priv.width == 0 || widget->priv.height == 0) + gnt_widget_size_request(widget); + DEBUG; +} + +static gboolean +gnt_box_key_pressed(GntWidget *widget, const char *text) +{ + GntBox *box = GNT_BOX(widget); + + /*if (box->list == NULL)*/ + /*return FALSE;*/ + + if (box->active == NULL) + box->active = box->list; + + if (gnt_widget_key_pressed(box->active->data, text)) + return TRUE; + + if (text[0] == 27) + { + GList *now = NULL; + if (strcmp(text+1, GNT_KEY_LEFT) == 0) + { + now = box->active->prev; + if (now == NULL) + now = g_list_last(box->list); + } + else if (strcmp(text+1, GNT_KEY_RIGHT) == 0) + { + now = box->active->next; + if (now == NULL) + now = box->list; + } + + if (now) + { + gnt_widget_set_focus(box->active->data, FALSE); + box->active = now; + gnt_widget_set_focus(box->active->data, TRUE); + + return TRUE; + } + } + + return FALSE; +} + +static GntWidget *find_focused_widget(GntBox *box) +{ + GList *iter; + + for (iter = box->list; iter; iter = iter->next) + { + GntWidget *w = iter->data; + + if (GNT_IS_BOX(w)) + { + if ((w = find_focused_widget(GNT_BOX(w))) != NULL) + return w; + } + else + { + if (GNT_WIDGET_IS_FLAG_SET(w, GNT_WIDGET_CAN_TAKE_FOCUS) && + GNT_WIDGET_IS_FLAG_SET(w, GNT_WIDGET_HAS_FOCUS)) + return w; + } + } + return NULL; +} + +static void +gnt_box_lost_focus(GntWidget *widget) +{ + GntBox *box = GNT_BOX(widget); + GntWidget *p = widget; + + while (p->parent) + p = p->parent; + + p = find_focused_widget(GNT_BOX(p)); + if (p) + gnt_widget_set_focus(p, FALSE); +} + +static void +gnt_box_destroy(GntWidget *w) +{ + GntBox *box = GNT_BOX(w); + GList *iter; + + for (iter = box->list; iter; iter = iter->next) + { + gnt_widget_destroy(iter->data); + } + + g_list_free(box->list); +} + +static void +gnt_box_class_init(GntWidgetClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = GNT_WIDGET_CLASS(klass); + parent_class->destroy = gnt_box_destroy; + parent_class->draw = gnt_box_draw; + parent_class->map = gnt_box_map; + parent_class->size_request = gnt_box_size_request; + parent_class->set_position = gnt_box_set_position; + parent_class->key_pressed = gnt_box_key_pressed; + parent_class->lost_focus = gnt_box_lost_focus; + + DEBUG; +} + +static void +gnt_box_init(GTypeInstance *instance, gpointer class) +{ + DEBUG; +} + +/****************************************************************************** + * GntBox API + *****************************************************************************/ +GType +gnt_box_get_gtype(void) +{ + static GType type = 0; + + if(type == 0) + { + static const GTypeInfo info = { + sizeof(GntBoxClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)gnt_box_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(GntBox), + 0, /* n_preallocs */ + gnt_box_init, /* instance_init */ + }; + + type = g_type_register_static(GNT_TYPE_WIDGET, + "GntBox", + &info, 0); + } + + return type; +} + +GntWidget *gnt_box_new(gboolean homo, gboolean vert) +{ + GntWidget *widget = g_object_new(GNT_TYPE_BOX, NULL); + GntBox *box = GNT_BOX(widget); + + box->homogeneous = homo; + box->vertical = vert; + gnt_widget_set_take_focus(widget, TRUE); + GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); + + return widget; +} + +void gnt_box_add_widget(GntBox *b, GntWidget *widget) +{ + b->list = g_list_append(b->list, widget); + widget->parent = GNT_WIDGET(b); +} + +void gnt_box_set_title(GntBox *b, const char *title) +{ + g_free(b->title); + b->title = g_strdup(title); +} + Property changes on: trunk/console/libgnt/gntbox.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntbox.h =================================================================== --- trunk/console/libgnt/gntbox.h (rev 0) +++ trunk/console/libgnt/gntbox.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,58 @@ +#ifndef GNT_BOX_H +#define GNT_BOX_H + +#include "gnt.h" +#include "gntwidget.h" + +#define GNT_TYPE_BOX (gnt_box_get_gtype()) +#define GNT_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_BOX, GntBox)) +#define GNT_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_BOX, GntBoxClass)) +#define GNT_IS_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_BOX)) +#define GNT_IS_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_BOX)) +#define GNT_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_BOX, GntBoxClass)) + +typedef struct _GnBox GntBox; +typedef struct _GnBoxClass GntBoxClass; + +struct _GnBox +{ + GntWidget parent; + + gboolean vertical; + gboolean homogeneous; + GList *list; /* List of widgets */ + + GList *active; + + char *title; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +struct _GnBoxClass +{ + GntWidgetClass parent; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +G_BEGIN_DECLS + +GType gnt_box_get_gtype(void); + +GntWidget *gnt_box_new(gboolean homo, gboolean vert); + +void gnt_box_add_widget(GntBox *box, GntWidget *widget); + +void gnt_box_set_title(GntBox *box, const char *title); + +G_END_DECLS + +#endif /* GNT_BOX_H */ + Property changes on: trunk/console/libgnt/gntbox.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntbutton.c =================================================================== --- trunk/console/libgnt/gntbutton.c (rev 0) +++ trunk/console/libgnt/gntbutton.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,116 @@ +#include "gntbutton.h" + +enum +{ + SIGS = 1, +}; + +static GntWidgetClass *parent_class = NULL; +static guint signals[SIGS] = { 0 }; + +static void +gnt_button_draw(GntWidget *widget) +{ + GntButton *button = GNT_BUTTON(widget); + GntColorType type; + + if (GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_HAS_FOCUS) + type = GNT_COLOR_HIGHLIGHT; + else + type = GNT_COLOR_NORMAL; + wbkgdset(widget->window, '\0' | COLOR_PAIR(type)); + mvwprintw(widget->window, 1, 1, button->priv->text); + + wrefresh(widget->window); + + DEBUG; +} + +static void +gnt_button_size_request(GntWidget *widget) +{ + GntButton *button = GNT_BUTTON(widget); + widget->priv.width = g_utf8_strlen(button->priv->text, -1) + 2; + widget->priv.height = 3; +} + +static void +gnt_button_map(GntWidget *widget) +{ + if (widget->priv.width == 0 || widget->priv.height == 0) + gnt_widget_size_request(widget); + DEBUG; +} + +static gboolean +gnt_button_key_pressed(GntWidget *widget, const char *key) +{ + if (strcmp(key, GNT_KEY_ENTER) == 0) + { + gnt_widget_activate(widget); + return TRUE; + } + return FALSE; +} + +static void +gnt_button_class_init(GntWidgetClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = GNT_WIDGET_CLASS(klass); + parent_class->draw = gnt_button_draw; + parent_class->map = gnt_button_map; + parent_class->size_request = gnt_button_size_request; + parent_class->key_pressed = gnt_button_key_pressed; + + DEBUG; +} + +static void +gnt_button_init(GTypeInstance *instance, gpointer class) +{ + GntButton *button = GNT_BUTTON(instance); + button->priv = g_new0(GntButtonPriv, 1); + DEBUG; +} + +/****************************************************************************** + * GntButton API + *****************************************************************************/ +GType +gnt_button_get_gtype(void) { + static GType type = 0; + + if(type == 0) { + static const GTypeInfo info = { + sizeof(GntButtonClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)gnt_button_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(GntButton), + 0, /* n_preallocs */ + gnt_button_init, /* instance_init */ + }; + + type = g_type_register_static(GNT_TYPE_WIDGET, + "GntButton", + &info, 0); + } + + return type; +} + +GntWidget *gnt_button_new(const char *text) +{ + GntWidget *widget = g_object_new(GNT_TYPE_BUTTON, NULL); + GntButton *button = GNT_BUTTON(widget); + + button->priv->text = g_strdup(text); + gnt_widget_set_take_focus(widget, TRUE); + + return widget; +} + Property changes on: trunk/console/libgnt/gntbutton.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntbutton.h =================================================================== --- trunk/console/libgnt/gntbutton.h (rev 0) +++ trunk/console/libgnt/gntbutton.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,55 @@ +#ifndef GNT_BUTTON_H +#define GNT_BUTTON_H + +#include <glib.h> +#include <glib-object.h> +#include "gnt.h" +#include "gntwidget.h" + +#define GNT_TYPE_BUTTON (gnt_button_get_gtype()) +#define GNT_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_BUTTON, GntButton)) +#define GNT_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_BUTTON, GntButtonClass)) +#define GNT_IS_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_BUTTON)) +#define GNT_IS_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_BUTTON)) +#define GNT_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_BUTTON, GntButtonClass)) + +typedef struct _GnButton GntButton; +typedef struct _GnButtonPriv GntButtonPriv; +typedef struct _GnButtonClass GntButtonClass; + +struct _GnButtonPriv +{ + char *text; +}; + +struct _GnButton +{ + GntWidget parent; + + GntButtonPriv *priv; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +struct _GnButtonClass +{ + GntWidgetClass parent; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +G_BEGIN_DECLS + +GType gnt_button_get_gtype(void); + +GntWidget *gnt_button_new(const char *text); + +G_END_DECLS + +#endif /* GNT_BUTTON_H */ Property changes on: trunk/console/libgnt/gntbutton.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntcolors.c =================================================================== --- trunk/console/libgnt/gntcolors.c (rev 0) +++ trunk/console/libgnt/gntcolors.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,21 @@ +#include <ncursesw/ncurses.h> +#include "gntcolors.h" + +void gnt_init_colors() +{ + /* XXX: Do some init_color()s */ + init_color(GNT_COLOR_BLACK, 0, 0, 0); + init_color(GNT_COLOR_RED, 1000, 0, 0); + init_color(GNT_COLOR_GREEN, 0, 1000, 0); + init_color(GNT_COLOR_BLUE, 0, 0, 1000); + init_color(GNT_COLOR_WHITE, 1000, 1000, 1000); + init_color(GNT_COLOR_GRAY, 799, 799, 799); + init_color(GNT_COLOR_DARK_GRAY, 256, 256, 256); + + /* Now some init_pair()s */ + init_pair(GNT_COLOR_NORMAL, GNT_COLOR_BLACK, GNT_COLOR_WHITE); + init_pair(GNT_COLOR_HIGHLIGHT, GNT_COLOR_BLUE, GNT_COLOR_GRAY); + init_pair(GNT_COLOR_SHADOW, GNT_COLOR_BLACK, GNT_COLOR_DARK_GRAY); + init_pair(GNT_COLOR_TITLE, GNT_COLOR_WHITE, GNT_COLOR_DARK_GRAY); +} + Property changes on: trunk/console/libgnt/gntcolors.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntcolors.h =================================================================== --- trunk/console/libgnt/gntcolors.h (rev 0) +++ trunk/console/libgnt/gntcolors.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,34 @@ +#ifndef GNT_COLORS_H +#define GNT_COLORS_H + +typedef enum +{ + GNT_COLOR_NORMAL = 1, + GNT_COLOR_HIGHLIGHT, /* eg. when a button is selected */ + GNT_COLOR_DISABLED, /* eg. when a button is disabled */ + GNT_COLOR_HIGHLIGHT_D, /* eg. when a button is selected, but some other window is in focus */ + GNT_COLOR_TEXT_NORMAL, + GNT_COLOR_TEXT_INACTIVE, /* when the entry is out of focus */ + GNT_COLOR_MNEMONIC, + GNT_COLOR_MNEMONIC_D, + GNT_COLOR_SHADOW, + GNT_COLOR_TITLE, + GNT_COLORS +} GntColorType; + +enum +{ + GNT_COLOR_BLACK = 1, + GNT_COLOR_RED, + GNT_COLOR_GREEN, + GNT_COLOR_BLUE, + GNT_COLOR_WHITE, + GNT_COLOR_GRAY, + GNT_COLOR_DARK_GRAY, + GNT_TOTAL_COLORS +}; + +/* populate some default colors */ +void gnt_init_colors(); + +#endif Property changes on: trunk/console/libgnt/gntcolors.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntkeys.h =================================================================== --- trunk/console/libgnt/gntkeys.h (rev 0) +++ trunk/console/libgnt/gntkeys.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,14 @@ +#ifndef GNT_KEYS_H +#define GNT_KEYS_H + +#define GNT_KEY_POPUP "[29~" + +/* Arrow keys */ +#define GNT_KEY_LEFT "[D" +#define GNT_KEY_RIGHT "[C" +#define GNT_KEY_UP "[A" +#define GNT_KEY_DOWN "[B" + +#define GNT_KEY_ENTER "\r" + +#endif Property changes on: trunk/console/libgnt/gntkeys.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntlabel.c =================================================================== --- trunk/console/libgnt/gntlabel.c (rev 0) +++ trunk/console/libgnt/gntlabel.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,120 @@ +#include "gntlabel.h" + +#include <string.h> + +enum +{ + SIGS = 1, +}; + +static GntWidgetClass *parent_class = NULL; +static guint signals[SIGS] = { 0 }; + +static void +gnt_label_destroy(GntWidget *widget) +{ + GntLabel *label = GNT_LABEL(widget); + g_free(label->text); +} + +static void +gnt_label_draw(GntWidget *widget) +{ + GntLabel *label = GNT_LABEL(widget); + + wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); + mvwprintw(widget->window, 0, 0, label->text); + wrefresh(widget->window); + + DEBUG; +} + +static void +gnt_label_size_request(GntWidget *widget) +{ + GntLabel *label = GNT_LABEL(widget); + char *s = label->text, *last = s; + int count = 1; + int max = 0; + + /* XXX: ew ... everyone look away */ + while (*s) + { + if (*s == '\n' || *s == '\r') + { + count++; + if (max < s - last + 1) + max = s - last + 1; + last = s + 1; + } + s++; + } + if (max < s - last + 1) + max = s - last + 1; + widget->priv.height = count; + + widget->priv.width = max; +} + +static void +gnt_label_class_init(GntWidgetClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = GNT_WIDGET_CLASS(klass); + parent_class->destroy = gnt_label_destroy; + parent_class->draw = gnt_label_draw; + parent_class->map = NULL; + parent_class->size_request = gnt_label_size_request; + + DEBUG; +} + +static void +gnt_label_init(GTypeInstance *instance, gpointer class) +{ + DEBUG; +} + +/****************************************************************************** + * GntLabel API + *****************************************************************************/ +GType +gnt_label_get_gtype(void) +{ + static GType type = 0; + + if(type == 0) + { + static const GTypeInfo info = { + sizeof(GntLabelClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)gnt_label_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(GntLabel), + 0, /* n_preallocs */ + gnt_label_init, /* instance_init */ + }; + + type = g_type_register_static(GNT_TYPE_WIDGET, + "GntLabel", + &info, 0); + } + + return type; +} + +GntWidget *gnt_label_new(const char *text) +{ + GntWidget *widget = g_object_new(GNT_TYPE_LABEL, NULL); + GntLabel *label = GNT_LABEL(widget); + + label->text = g_strdup(text); + gnt_widget_set_take_focus(widget, FALSE); + GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); + + return widget; +} + Property changes on: trunk/console/libgnt/gntlabel.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntlabel.h =================================================================== --- trunk/console/libgnt/gntlabel.h (rev 0) +++ trunk/console/libgnt/gntlabel.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,48 @@ +#ifndef GNT_LABEL_H +#define GNT_LABEL_H + +#include "gnt.h" +#include "gntwidget.h" + +#define GNT_TYPE_LABEL (gnt_label_get_gtype()) +#define GNT_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_LABEL, GntLabel)) +#define GNT_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_LABEL, GntLabelClass)) +#define GNT_IS_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_LABEL)) +#define GNT_IS_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_LABEL)) +#define GNT_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_LABEL, GntLabelClass)) + +typedef struct _GnLabel GntLabel; +typedef struct _GnLabelClass GntLabelClass; + +struct _GnLabel +{ + GntWidget parent; + + char *text; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +struct _GnLabelClass +{ + GntWidgetClass parent; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +G_BEGIN_DECLS + +GType gnt_label_get_gtype(void); + +GntWidget *gnt_label_new(const char *text); + +G_END_DECLS + +#endif /* GNT_LABEL_H */ + Property changes on: trunk/console/libgnt/gntlabel.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntmain.c =================================================================== --- trunk/console/libgnt/gntmain.c (rev 0) +++ trunk/console/libgnt/gntmain.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,111 @@ +#include "gnt.h" +#include "gntkeys.h" +#include "gntcolors.h" +#include <stdio.h> +#include <stdlib.h> +#include <locale.h> + +static GList *focus_list; +static int max_x; +static int max_y; + +void gnt_screen_take_focus(GntWidget *widget) +{ + focus_list = g_list_prepend(focus_list, widget); +} + +void gnt_screen_remove_widget(GntWidget *widget) +{ + focus_list = g_list_remove(focus_list, widget); + if (focus_list) + gnt_widget_draw(focus_list->data); +} + +static gboolean +io_invoke(GIOChannel *source, GIOCondition cond, gpointer null) +{ + char buffer[256]; + + int rd = read(0, buffer, sizeof(buffer) - 1); + if (rd < 0) + { + endwin(); + printf("ERROR!\n"); + exit(1); + } + else if (rd == 0) + { + endwin(); + printf("EOF\n"); + exit(1); + } + + buffer[rd] = 0; + + if (focus_list) + { + gboolean ret = FALSE; + /*g_signal_emit_by_name(focus_list->data, "key_pressed", buffer, &ret);*/ + ret = gnt_widget_key_pressed(focus_list->data, buffer); + } + + if (buffer[0] == 27) + { + /* Some special key has been pressed */ + if (strcmp(buffer+1, GNT_KEY_POPUP) == 0) + { + /*printf("popup\n");*/ + } + else + { + /*printf("Unknown: %s\n", buffer+1);*/ + } + } + else + { + if (buffer[0] == 'q') + { + endwin(); + exit(1); + } + /*printf("%s\n", buffer);*/ + } + refresh(); + + return TRUE; +} + +void gnt_init() +{ + GIOChannel *channel = g_io_channel_unix_new(0); + + g_io_channel_set_encoding(channel, NULL, NULL); + g_io_channel_set_buffered(channel, FALSE); + g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL ); + + int result = g_io_add_watch(channel, + (G_IO_IN | G_IO_HUP | G_IO_ERR), + io_invoke, NULL); + + setlocale(LC_ALL, ""); + initscr(); + start_color(); + /*use_default_colors();*/ + gnt_init_colors(); + + max_x = getmaxx(stdscr); + max_y = getmaxy(stdscr); + + wbkgdset(stdscr, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); + noecho(); + refresh(); + mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, NULL); + g_type_init(); +} + +void gnt_main() +{ + GMainLoop *loop = g_main_new(FALSE); + g_main_run(loop); +} + Property changes on: trunk/console/libgnt/gntmain.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gnttree.c =================================================================== --- trunk/console/libgnt/gnttree.c (rev 0) +++ trunk/console/libgnt/gnttree.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,346 @@ +#include "gnttree.h" + +enum +{ + SIGS = 1, +}; + +/* XXX: Make this one into a GObject? + * ... Probably not */ +struct _GnTreeRow +{ + void *key; + char *text; + void *data; /* XXX: unused */ + + GntTreeRow *parent; + GntTreeRow *child; + GntTreeRow *next; +}; + +static GntWidgetClass *parent_class = NULL; +static guint signals[SIGS] = { 0 }; + +/* XXX: This is ugly, but what can you do ... */ +static void +gnt_tree_refresh(GntTree *tree) +{ + GntWidget *widget = GNT_WIDGET(tree); + int pos; + + if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER)) + pos = 0; + else + pos = 1; + + copywin(tree->scroll, widget->window, tree->top, 0, + pos, pos, widget->priv.height - pos - 1, widget->priv.width - pos - 1, FALSE); + wrefresh(widget->window); +} + +static void +redraw_tree(GntTree *tree) +{ + int start; + GntWidget *widget = GNT_WIDGET(tree); + GList *iter; + + wbkgd(tree->scroll, COLOR_PAIR(GNT_COLOR_NORMAL)); + + /* XXX: Add the rows */ + for (start = tree->top, iter = g_list_nth(tree->list, tree->top); + iter && start < tree->bottom; start++, iter = iter->next) + { + char str[2096]; /* XXX: This should be safe for any terminal */ + GntTreeRow *row = g_hash_table_lookup(tree->hash, iter->data); + + snprintf(str, widget->priv.width - 2, "%s\n", row->text); + + if (start == tree->current) + { + wbkgdset(tree->scroll, '\0' | COLOR_PAIR(GNT_COLOR_HIGHLIGHT)); + mvwprintw(tree->scroll, start, 0, str); + wbkgdset(tree->scroll, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); + } + else + mvwprintw(tree->scroll, start, 0, str); + } + + while (start < tree->bottom) + { + wmove(tree->scroll, start, 0); + wclrtoeol(tree->scroll); + start++; + } + + gnt_tree_refresh(tree); +} + +static void +gnt_tree_draw(GntWidget *widget) +{ + GntTree *tree = GNT_TREE(widget); + + /* For the Tree (or anything that scrolls), we will create a 'hidden' window + * of 'large enough' size. We never wrefresh that hidden-window, instead we + * just 'scroll' it, and wrefresh the subwindow */ + + if (tree->scroll == NULL) + { + tree->scroll = newwin(SCROLL_HEIGHT, widget->priv.width, widget->priv.y, widget->priv.x); + scrollok(tree->scroll, TRUE); + wsetscrreg(tree->scroll, 0, SCROLL_HEIGHT - 1); + + tree->top = 0; + tree->bottom = widget->priv.height - + (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER) ? 0 : 2); + } + + redraw_tree(tree); + + DEBUG; +} + +static void +gnt_tree_size_request(GntWidget *widget) +{ + if (widget->priv.height == 0) + widget->priv.height = 10; /* XXX: Why?! */ + if (widget->priv.width == 0) + widget->priv.width = 20; /* YYY: 'cuz ... */ +} + +static void +gnt_tree_map(GntWidget *widget) +{ + if (widget->priv.width == 0 || widget->priv.height == 0) + gnt_widget_size_request(widget); + DEBUG; +} + +static gboolean +gnt_tree_key_pressed(GntWidget *widget, const char *text) +{ + GntTree *tree = GNT_TREE(widget); + if (text[0] == 27) + { + if (strcmp(text+1, GNT_KEY_DOWN) == 0 && tree->current < g_list_length(tree->list) - 1) + { + tree->current++; + if (tree->current >= tree->bottom) + gnt_tree_scroll(tree, 1 + tree->current - tree->bottom); + redraw_tree(tree); + } + else if (strcmp(text+1, GNT_KEY_UP) == 0 && tree->current > 0) + { + tree->current--; + if (tree->current < tree->top) + gnt_tree_scroll(tree, tree->current - tree->top); + redraw_tree(tree); + } + } + else if (text[0] == '\r') + { + gnt_widget_activate(widget); + } + + return FALSE; +} + +static void +gnt_tree_destroy(GntWidget *widget) +{ + GntTree *tree = GNT_TREE(widget); + + g_hash_table_destroy(tree->hash); + g_list_free(tree->list); +} + +static void +gnt_tree_class_init(GntWidgetClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = GNT_WIDGET_CLASS(klass); + parent_class->destroy = gnt_tree_destroy; + parent_class->draw = gnt_tree_draw; + parent_class->map = gnt_tree_map; + parent_class->size_request = gnt_tree_size_request; + parent_class->key_pressed = gnt_tree_key_pressed; + + DEBUG; +} + +static void +gnt_tree_init(GTypeInstance *instance, gpointer class) +{ + DEBUG; +} + +/****************************************************************************** + * GntTree API + *****************************************************************************/ +GType +gnt_tree_get_gtype(void) +{ + static GType type = 0; + + if(type == 0) + { + static const GTypeInfo info = { + sizeof(GntTreeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)gnt_tree_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(GntTree), + 0, /* n_preallocs */ + gnt_tree_init, /* instance_init */ + }; + + type = g_type_register_static(GNT_TYPE_WIDGET, + "GntTree", + &info, 0); + } + + return type; +} + +GntWidget *gnt_tree_new() +{ + GntWidget *widget = g_object_new(GNT_TYPE_TREE, NULL); + GntTree *tree = GNT_TREE(widget); + + tree->hash = g_hash_table_new(g_direct_hash, g_direct_equal); + + return widget; +} + +void gnt_tree_set_visible_rows(GntTree *tree, int rows) +{ + GntWidget *widget = GNT_WIDGET(tree); + widget->priv.height = rows; + if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER)) + widget->priv.height += 2; +} + +int gnt_tree_get_visible_rows(GntTree *tree) +{ + GntWidget *widget = GNT_WIDGET(tree); + int ret = widget->priv.height; + if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER)) + widget->priv.height -= 2; +} + +void gnt_tree_scroll(GntTree *tree, int count) +{ + if (tree->top == 0 && count < 0) + return; + + if (count > 0 && tree->bottom + count >= g_list_length(tree->list)) + count = g_list_length(tree->list) - tree->bottom; + else if (count < 0 && tree->top + count < 0) + count = -tree->top; + + tree->top += count; + tree->bottom += count; + + /*wscrl(tree->scroll, count);*/ + gnt_tree_refresh(tree); +} + +void gnt_tree_add_row_after(GntTree *tree, void *key, const char *text, void *parent, void *bigbro) +{ + GntTreeRow *row = g_new0(GntTreeRow, 1), *pr = NULL; + + row->key = key; + row->text = g_strdup(text); + row->data = NULL; + + g_hash_table_insert(tree->hash, key, row); + + if (tree->root == NULL) + { + tree->root = row; + tree->list = g_list_prepend(tree->list, key); + } + else + { + int position; + + if (bigbro) + { + pr = g_hash_table_lookup(tree->hash, bigbro); + if (pr) + { + row->next = pr->next; + pr->next = row; + row->parent = pr->parent; + + position = g_list_index(tree->list, bigbro); + } + } + + if (pr == NULL && parent) + { + pr = g_hash_table_lookup(tree->hash, parent); + if (pr) + { + row->next = pr->child; + pr->child = row; + row->parent = pr; + + position = g_list_index(tree->list, parent); + } + } + + if (pr == NULL) + { + row->next = tree->root; + tree->root = row; + + tree->list = g_list_prepend(tree->list, key); + } + else + { + tree->list = g_list_insert(tree->list, key, position + 1); + } + } + + if (GNT_WIDGET_IS_FLAG_SET(GNT_WIDGET(tree), GNT_WIDGET_MAPPED)) + redraw_tree(tree); +} + +gpointer gnt_tree_get_selection_data(GntTree *tree) +{ + return g_list_nth(tree->list, tree->current); +} + +int gnt_tree_get_selection_index(GntTree *tree) +{ + return tree->current; +} + +void gnt_tree_remove(GntTree *tree, gpointer key) +{ + GntTreeRow *row = g_hash_table_lookup(tree->hash, key); + if (row) + { + int len, pos; + + g_free(row->text); + g_free(row); + + pos = g_list_index(tree->list, key); + + g_hash_table_remove(tree->hash, key); + tree->list = g_list_remove(tree->list, key); + + if (pos >= tree->top && pos < tree->bottom) + { + redraw_tree(tree); + } + } +} + Property changes on: trunk/console/libgnt/gnttree.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gnttree.h =================================================================== --- trunk/console/libgnt/gnttree.h (rev 0) +++ trunk/console/libgnt/gnttree.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,75 @@ +#ifndef GNT_TREE_H +#define GNT_TREE_H + +#include "gntwidget.h" +#include "gnt.h" +#include "gntcolors.h" +#include "gntkeys.h" + +#define GNT_TYPE_TREE (gnt_tree_get_gtype()) +#define GNT_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_TREE, GntTree)) +#define GNT_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_TREE, GntTreeClass)) +#define GNT_IS_TREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_TREE)) +#define GNT_IS_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_TREE)) +#define GNT_TREE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_TREE, GntTreeClass)) + +#define GNT_TREE_FLAGS(obj) (GNT_TREE(obj)->priv.flags) +#define GNT_TREE_SET_FLAGS(obj, flags) (GNT_TREE_FLAGS(obj) |= flags) +#define GNT_TREE_UNSET_FLAGS(obj, flags) (GNT_TREE_FLAGS(obj) &= ~(flags)) + +typedef struct _GnTree GntTree; +typedef struct _GnTreePriv GntTreePriv; +typedef struct _GnTreeClass GntTreeClass; + +typedef struct _GnTreeRow GntTreeRow; + +struct _GnTree +{ + GntWidget parent; + + WINDOW *scroll; + + int current; /* current selection */ + + int top; /* The index in 'list' of the topmost visible item */ + int bottom; /* The index in 'list' of the bottommost visible item */ + + GntTreeRow *root; /* The root of all evil */ + + GList *list; /* List of GntTreeRow s */ + GHashTable *hash; /* XXX: We may need this for quickly referencing the rows */ +}; + +struct _GnTreeClass +{ + GntWidgetClass parent; + + void (*gnt_reserved1)(void); + void (*gnt_reserved2)(void); + void (*gnt_reserved3)(void); + void (*gnt_reserved4)(void); +}; + +G_BEGIN_DECLS + +GType gnt_tree_get_gtype(void); + +GntWidget *gnt_tree_new(); + +void gnt_tree_set_visible_rows(GntTree *tree, int rows); + +int gnt_tree_get_visible_rows(GntTree *tree); + +void gnt_tree_scroll(GntTree *tree, int count); + +void gnt_tree_add_row_after(GntTree *tree, void *key, const char *text, void *parent, void *bigbro); + +gpointer gnt_tree_get_selection_data(GntTree *tree); + +int gnt_tree_get_selection_index(GntTree *tree); + +void gnt_tree_remove(GntTree *tree, gpointer key); + +G_END_DECLS + +#endif /* GNT_TREE_H */ Property changes on: trunk/console/libgnt/gnttree.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntutils.c =================================================================== --- trunk/console/libgnt/gntutils.c (rev 0) +++ trunk/console/libgnt/gntutils.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,100 @@ +#include "gntutils.h" + +void gnt_closure_marshal_BOOLEAN__STRING(GClosure *closure, + GValue *ret_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + typedef gboolean (*func) (gpointer data1, const char *arg1, gpointer data2); + register func callback; + register GCClosure *cc = (GCClosure*)closure; + register gpointer data1, data2; + gboolean ret; + + g_return_if_fail(ret_value != NULL); + g_return_if_fail(n_param_values == 2); + + if (G_CCLOSURE_SWAP_DATA(closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer(param_values + 0); + } + else + { + data1 = g_value_peek_pointer(param_values + 0); + data2 = closure->data; + } + + callback = (func) (marshal_data ? marshal_data : cc->callback); + ret = callback(data1, g_value_get_string(param_values + 1) , data2); + g_value_set_boolean(ret_value, ret); +} + +void gnt_closure_marshal_VOID__INT_INT_INT_INT(GClosure *closure, + GValue *ret_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + typedef void (*func) (gpointer data1, int, int, int, int, gpointer data2); + register func callback; + register GCClosure *cc = (GCClosure*)closure; + register gpointer data1, data2; + + g_return_if_fail(n_param_values == 5); + + if (G_CCLOSURE_SWAP_DATA(closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer(param_values + 0); + } + else + { + data1 = g_value_peek_pointer(param_values + 0); + data2 = closure->data; + } + + callback = (func) (marshal_data ? marshal_data : cc->callback); + callback(data1, + g_value_get_int(param_values + 1) , + g_value_get_int(param_values + 2) , + g_value_get_int(param_values + 3) , + g_value_get_int(param_values + 4) , + data2); +} + +void gnt_closure_marshal_VOID__INT_INT(GClosure *closure, + GValue *ret_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + typedef void (*func) (gpointer data1, int, int, gpointer data2); + register func callback; + register GCClosure *cc = (GCClosure*)closure; + register gpointer data1, data2; + + g_return_if_fail(n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA(closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer(param_values + 0); + } + else + { + data1 = g_value_peek_pointer(param_values + 0); + data2 = closure->data; + } + + callback = (func) (marshal_data ? marshal_data : cc->callback); + callback(data1, + g_value_get_int(param_values + 1) , + g_value_get_int(param_values + 2) , + data2); +} + Property changes on: trunk/console/libgnt/gntutils.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntutils.h =================================================================== --- trunk/console/libgnt/gntutils.h (rev 0) +++ trunk/console/libgnt/gntutils.h 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,23 @@ +#include "gntwidget.h" + +void gnt_closure_marshal_BOOLEAN__STRING(GClosure *closure, + GValue *ret_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +void gnt_closure_marshal_VOID__INT_INT_INT_INT(GClosure *closure, + GValue *ret_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +void gnt_closure_marshal_VOID__INT_INT(GClosure *closure, + GValue *ret_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + Property changes on: trunk/console/libgnt/gntutils.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntwidget.c =================================================================== --- trunk/console/libgnt/gntwidget.c (rev 0) +++ trunk/console/libgnt/gntwidget.c 2006-06-22 08:33:54 UTC (rev 16308) @@ -0,0 +1,386 @@ +/* Stuff brutally ripped from Gflib */ + +#include "gntwidget.h" +#include "gntutils.h" +#include "gnt.h" + +enum +{ + SIG_DESTROY, + SIG_DRAW, + SIG_GIVE_FOCUS, + SIG_LOST_FOCUS, + SIG_KEY_PRESSED, + SIG_MAP, + SIG_ACTIVATE, + SIG_EXPOSE, + SIG_SIZE_REQUEST, + SIG_POSITION, + SIGS +}; + +static GObjectClass *parent_class = NULL; +static guint signals[SIGS] = { 0 }; + +static void +gnt_widget_init(GTypeInstance *instance, gpointer class) +{ + GntWidget *widget = GNT_WIDGET(instance); + widget->priv.name = NULL; + DEBUG; +} + +static void +gnt_widget_map(GntWidget *widget) +{ + /* Get some default size for the widget */ + DEBUG; + g_signal_emit(widget, signals[SIG_MAP], 0); + GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_MAPPED); +} + +static void +gnt_widget_dispose(GObject *obj) +{ + GntWidget *self = GNT_WIDGET(obj); + + if(!(GNT_WIDGET_FLAGS(self) & GNT_WIDGET_DESTROYING)) { + GNT_WIDGET_SET_FLAGS(self, GNT_WIDGET_DESTROYING); + + g_signal_emit(self, signals[SIG_DESTROY], 0); + + GNT_WIDGET_UNSET_FLAGS(self, GNT_WIDGET_DESTROYING); + } + + parent_class->dispose(obj); + DEBUG; +} + +static void +gnt_widget_focus_change(GntWidget *widget) +{ + if (GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_MAPPED) + gnt_widget_draw(widget); +} + +static void +gnt_widget_class_init(GntWidgetClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + + parent_class = g_type_class_peek_parent(klass); + + obj_class->dispose = gnt_widget_dispose; + + klass->destroy = gnt_widget_destroy; + klass->show = gnt_widget_show; + klass->draw = gnt_widget_draw; + klass->expose = gnt_widget_expose; + klass->map = gnt_widget_map; + klass->lost_focus = gnt_widget_focus_change; + klass->gained_focus = gnt_widget_focus_change; + + klass->key_pressed = NULL; + klass->activate = NULL; + + signals[SIG_DESTROY] = + g_signal_new("destroy", + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(GntWidgetClass, destroy), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + signals[SIG_GIVE_FOCUS] = + g_signal_new("gained-focus", + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(GntWidgetClass, gained_focus), + NULL, NULL, + g_cclo... [truncated message content] |
From: <mar...@us...> - 2006-06-26 03:01:06
|
Revision: 16340 Author: markhuetsch Date: 2006-06-25 19:58:54 -0700 (Sun, 25 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16340&view=rev Log Message: ----------- Performed minor cleanup of the OpenQ codebase and patched it into the Gaim trunk as a prpl, providing basic QQ functionality. Modified Paths: -------------- trunk/configure.ac trunk/pixmaps/smileys/default/Makefile.am trunk/pixmaps/smileys/default/theme trunk/pixmaps/status/default/Makefile.am trunk/src/protocols/Makefile.am Added Paths: ----------- trunk/pixmaps/smileys/default/qq_smiley_0.gif trunk/pixmaps/smileys/default/qq_smiley_1.gif trunk/pixmaps/smileys/default/qq_smiley_10.gif trunk/pixmaps/smileys/default/qq_smiley_11.gif trunk/pixmaps/smileys/default/qq_smiley_12.gif trunk/pixmaps/smileys/default/qq_smiley_13.gif trunk/pixmaps/smileys/default/qq_smiley_14.gif trunk/pixmaps/smileys/default/qq_smiley_15.gif trunk/pixmaps/smileys/default/qq_smiley_16.gif trunk/pixmaps/smileys/default/qq_smiley_17.gif trunk/pixmaps/smileys/default/qq_smiley_18.gif trunk/pixmaps/smileys/default/qq_smiley_19.gif trunk/pixmaps/smileys/default/qq_smiley_2.gif trunk/pixmaps/smileys/default/qq_smiley_20.gif trunk/pixmaps/smileys/default/qq_smiley_21.gif trunk/pixmaps/smileys/default/qq_smiley_22.gif trunk/pixmaps/smileys/default/qq_smiley_23.gif trunk/pixmaps/smileys/default/qq_smiley_24.gif trunk/pixmaps/smileys/default/qq_smiley_25.gif trunk/pixmaps/smileys/default/qq_smiley_26.gif trunk/pixmaps/smileys/default/qq_smiley_27.gif trunk/pixmaps/smileys/default/qq_smiley_28.gif trunk/pixmaps/smileys/default/qq_smiley_29.gif trunk/pixmaps/smileys/default/qq_smiley_3.gif trunk/pixmaps/smileys/default/qq_smiley_30.gif trunk/pixmaps/smileys/default/qq_smiley_31.gif trunk/pixmaps/smileys/default/qq_smiley_32.gif trunk/pixmaps/smileys/default/qq_smiley_33.gif trunk/pixmaps/smileys/default/qq_smiley_34.gif trunk/pixmaps/smileys/default/qq_smiley_35.gif trunk/pixmaps/smileys/default/qq_smiley_36.gif trunk/pixmaps/smileys/default/qq_smiley_37.gif trunk/pixmaps/smileys/default/qq_smiley_38.gif trunk/pixmaps/smileys/default/qq_smiley_39.gif trunk/pixmaps/smileys/default/qq_smiley_4.gif trunk/pixmaps/smileys/default/qq_smiley_40.gif trunk/pixmaps/smileys/default/qq_smiley_41.gif trunk/pixmaps/smileys/default/qq_smiley_42.gif trunk/pixmaps/smileys/default/qq_smiley_43.gif trunk/pixmaps/smileys/default/qq_smiley_44.gif trunk/pixmaps/smileys/default/qq_smiley_45.gif trunk/pixmaps/smileys/default/qq_smiley_46.gif trunk/pixmaps/smileys/default/qq_smiley_47.gif trunk/pixmaps/smileys/default/qq_smiley_48.gif trunk/pixmaps/smileys/default/qq_smiley_49.gif trunk/pixmaps/smileys/default/qq_smiley_5.gif trunk/pixmaps/smileys/default/qq_smiley_50.gif trunk/pixmaps/smileys/default/qq_smiley_51.gif trunk/pixmaps/smileys/default/qq_smiley_52.gif trunk/pixmaps/smileys/default/qq_smiley_53.gif trunk/pixmaps/smileys/default/qq_smiley_54.gif trunk/pixmaps/smileys/default/qq_smiley_55.gif trunk/pixmaps/smileys/default/qq_smiley_56.gif trunk/pixmaps/smileys/default/qq_smiley_57.gif trunk/pixmaps/smileys/default/qq_smiley_58.gif trunk/pixmaps/smileys/default/qq_smiley_59.gif trunk/pixmaps/smileys/default/qq_smiley_6.gif trunk/pixmaps/smileys/default/qq_smiley_60.gif trunk/pixmaps/smileys/default/qq_smiley_61.gif trunk/pixmaps/smileys/default/qq_smiley_62.gif trunk/pixmaps/smileys/default/qq_smiley_63.gif trunk/pixmaps/smileys/default/qq_smiley_64.gif trunk/pixmaps/smileys/default/qq_smiley_65.gif trunk/pixmaps/smileys/default/qq_smiley_66.gif trunk/pixmaps/smileys/default/qq_smiley_67.gif trunk/pixmaps/smileys/default/qq_smiley_68.gif trunk/pixmaps/smileys/default/qq_smiley_69.gif trunk/pixmaps/smileys/default/qq_smiley_7.gif trunk/pixmaps/smileys/default/qq_smiley_70.gif trunk/pixmaps/smileys/default/qq_smiley_71.gif trunk/pixmaps/smileys/default/qq_smiley_72.gif trunk/pixmaps/smileys/default/qq_smiley_73.gif trunk/pixmaps/smileys/default/qq_smiley_74.gif trunk/pixmaps/smileys/default/qq_smiley_75.gif trunk/pixmaps/smileys/default/qq_smiley_76.gif trunk/pixmaps/smileys/default/qq_smiley_77.gif trunk/pixmaps/smileys/default/qq_smiley_78.gif trunk/pixmaps/smileys/default/qq_smiley_79.gif trunk/pixmaps/smileys/default/qq_smiley_8.gif trunk/pixmaps/smileys/default/qq_smiley_80.gif trunk/pixmaps/smileys/default/qq_smiley_81.gif trunk/pixmaps/smileys/default/qq_smiley_82.gif trunk/pixmaps/smileys/default/qq_smiley_83.gif trunk/pixmaps/smileys/default/qq_smiley_84.gif trunk/pixmaps/smileys/default/qq_smiley_85.gif trunk/pixmaps/smileys/default/qq_smiley_86.gif trunk/pixmaps/smileys/default/qq_smiley_87.gif trunk/pixmaps/smileys/default/qq_smiley_88.gif trunk/pixmaps/smileys/default/qq_smiley_89.gif trunk/pixmaps/smileys/default/qq_smiley_9.gif trunk/pixmaps/smileys/default/qq_smiley_90.gif trunk/pixmaps/smileys/default/qq_smiley_91.gif trunk/pixmaps/smileys/default/qq_smiley_92.gif trunk/pixmaps/smileys/default/qq_smiley_93.gif trunk/pixmaps/smileys/default/qq_smiley_94.gif trunk/pixmaps/smileys/default/qq_smiley_95.gif trunk/pixmaps/status/default/qq.png trunk/src/protocols/qq/ trunk/src/protocols/qq/Makefile.am trunk/src/protocols/qq/Makefile.in trunk/src/protocols/qq/Makefile.mingw trunk/src/protocols/qq/TODO trunk/src/protocols/qq/buddy_info.c trunk/src/protocols/qq/buddy_info.h trunk/src/protocols/qq/buddy_list.c trunk/src/protocols/qq/buddy_list.h trunk/src/protocols/qq/buddy_opt.c trunk/src/protocols/qq/buddy_opt.h trunk/src/protocols/qq/buddy_status.c trunk/src/protocols/qq/buddy_status.h trunk/src/protocols/qq/char_conv.c trunk/src/protocols/qq/char_conv.h trunk/src/protocols/qq/crypt.c trunk/src/protocols/qq/crypt.h trunk/src/protocols/qq/file_trans.c trunk/src/protocols/qq/file_trans.h trunk/src/protocols/qq/group.c trunk/src/protocols/qq/group.h trunk/src/protocols/qq/group_admindlg.c trunk/src/protocols/qq/group_admindlg.h trunk/src/protocols/qq/group_conv.c trunk/src/protocols/qq/group_conv.h trunk/src/protocols/qq/group_find.c trunk/src/protocols/qq/group_find.h trunk/src/protocols/qq/group_free.c trunk/src/protocols/qq/group_free.h trunk/src/protocols/qq/group_hash.c trunk/src/protocols/qq/group_hash.h trunk/src/protocols/qq/group_im.c trunk/src/protocols/qq/group_im.h trunk/src/protocols/qq/group_info.c trunk/src/protocols/qq/group_info.h trunk/src/protocols/qq/group_join.c trunk/src/protocols/qq/group_join.h trunk/src/protocols/qq/group_misc.c trunk/src/protocols/qq/group_misc.h trunk/src/protocols/qq/group_network.c trunk/src/protocols/qq/group_network.h trunk/src/protocols/qq/group_opt.c trunk/src/protocols/qq/group_opt.h trunk/src/protocols/qq/group_search.c trunk/src/protocols/qq/group_search.h trunk/src/protocols/qq/header_info.c trunk/src/protocols/qq/header_info.h trunk/src/protocols/qq/im.c trunk/src/protocols/qq/im.h trunk/src/protocols/qq/infodlg.c trunk/src/protocols/qq/infodlg.h trunk/src/protocols/qq/ip_location.c trunk/src/protocols/qq/ip_location.h trunk/src/protocols/qq/keep_alive.c trunk/src/protocols/qq/keep_alive.h trunk/src/protocols/qq/login_logout.c trunk/src/protocols/qq/login_logout.h trunk/src/protocols/qq/packet_parse.c trunk/src/protocols/qq/packet_parse.h trunk/src/protocols/qq/qq.c trunk/src/protocols/qq/qq.h trunk/src/protocols/qq/qq_proxy.c trunk/src/protocols/qq/qq_proxy.h trunk/src/protocols/qq/recv_core.c trunk/src/protocols/qq/recv_core.h trunk/src/protocols/qq/send_core.c trunk/src/protocols/qq/send_core.h trunk/src/protocols/qq/send_file.c trunk/src/protocols/qq/send_file.h trunk/src/protocols/qq/sendqueue.c trunk/src/protocols/qq/sendqueue.h trunk/src/protocols/qq/show.c trunk/src/protocols/qq/show.h trunk/src/protocols/qq/sys_msg.c trunk/src/protocols/qq/sys_msg.h trunk/src/protocols/qq/udp_proxy_s5.c trunk/src/protocols/qq/udp_proxy_s5.h trunk/src/protocols/qq/utils.c trunk/src/protocols/qq/utils.h Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-06-26 00:12:31 UTC (rev 16339) +++ trunk/configure.ac 2006-06-26 02:58:54 UTC (rev 16340) @@ -401,7 +401,7 @@ fi if test "x$STATIC_PRPLS" = "xall" ; then - STATIC_PRPLS="bonjour gg irc jabber msn novell oscar sametime silc simple yahoo zephyr" + STATIC_PRPLS="bonjour gg irc jabber msn novell oscar qq sametime silc simple yahoo zephyr" fi if test "x$have_meanwhile" != "xyes" ; then STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'` @@ -436,6 +436,7 @@ msn) static_msn=yes ;; novell) static_novell=yes ;; oscar) static_oscar=yes ;; + qq) static_qq=yes ;; sametime) static_sametime=yes ;; silc) static_silc=yes ;; simple) static_simple=yes ;; @@ -452,6 +453,7 @@ AM_CONDITIONAL(STATIC_MSN, test "x$static_msn" = "xyes") AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes") AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes") +AM_CONDITIONAL(STATIC_QQ, test "x$static_qq" = "xyes") AM_CONDITIONAL(STATIC_SAMETIME, test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes") AM_CONDITIONAL(STATIC_SILC, test "x$static_silc" = "xyes" -a "x$silcincludes" = "xyes" -a "x$silcclient" = "xyes") AM_CONDITIONAL(STATIC_SIMPLE, test "x$static_simple" = "xyes") @@ -464,7 +466,7 @@ AC_ARG_WITH(dynamic_prpls, [AC_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`]) if test "x$DYNAMIC_PRPLS" = "xall" ; then - DYNAMIC_PRPLS="bonjour gg irc jabber msn novell oscar sametime silc simple yahoo zephyr" + DYNAMIC_PRPLS="bonjour gg irc jabber msn novell oscar qq sametime silc simple yahoo zephyr" fi if test "x$have_meanwhile" != "xyes"; then DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'` @@ -488,6 +490,7 @@ msn) dynamic_msn=yes ;; novell) dynamic_novell=yes ;; oscar) dynamic_oscar=yes ;; + qq) dynamic_qq=yes ;; sametime) dynamic_sametime=yes ;; silc) dynamic_silc=yes ;; simple) dynamic_simple=yes ;; @@ -504,6 +507,7 @@ AM_CONDITIONAL(DYNAMIC_MSN, test "x$dynamic_msn" = "xyes") AM_CONDITIONAL(DYNAMIC_NOVELL, test "x$dynamic_novell" = "xyes") AM_CONDITIONAL(DYNAMIC_OSCAR, test "x$dynamic_oscar" = "xyes") +AM_CONDITIONAL(DYNAMIC_QQ, test "x$dynamic_qq" = "xyes") AM_CONDITIONAL(DYNAMIC_SAMETIME, test "x$dynamic_sametime" = "xyes" -a "x$have_meanwhile" = "xyes") AM_CONDITIONAL(DYNAMIC_SILC, test "x$dynamic_silc" = "xyes" -a "x$silcincludes" = "xyes" -a "x$silcclient" = "xyes") AM_CONDITIONAL(DYNAMIC_SIMPLE, test "x$dynamic_simple" = "xyes") @@ -1772,6 +1776,7 @@ src/protocols/napster/Makefile src/protocols/novell/Makefile src/protocols/oscar/Makefile + src/protocols/qq/Makefile src/protocols/sametime/Makefile src/protocols/silc/Makefile src/protocols/simple/Makefile Modified: trunk/pixmaps/smileys/default/Makefile.am =================================================================== --- trunk/pixmaps/smileys/default/Makefile.am 2006-06-26 00:12:31 UTC (rev 16339) +++ trunk/pixmaps/smileys/default/Makefile.am 2006-06-26 02:58:54 UTC (rev 16340) @@ -107,6 +107,104 @@ msn_wink.gif \ msn_xbox.png +QQ_SMILEYS = \ + qq_smiley_0.gif \ + qq_smiley_10.gif \ + qq_smiley_11.gif \ + qq_smiley_12.gif \ + qq_smiley_13.gif \ + qq_smiley_14.gif \ + qq_smiley_15.gif \ + qq_smiley_16.gif \ + qq_smiley_17.gif \ + qq_smiley_18.gif \ + qq_smiley_19.gif \ + qq_smiley_1.gif \ + qq_smiley_20.gif \ + qq_smiley_21.gif \ + qq_smiley_22.gif \ + qq_smiley_23.gif \ + qq_smiley_24.gif \ + qq_smiley_25.gif \ + qq_smiley_26.gif \ + qq_smiley_27.gif \ + qq_smiley_28.gif \ + qq_smiley_29.gif \ + qq_smiley_2.gif \ + qq_smiley_30.gif \ + qq_smiley_31.gif \ + qq_smiley_32.gif \ + qq_smiley_33.gif \ + qq_smiley_34.gif \ + qq_smiley_35.gif \ + qq_smiley_36.gif \ + qq_smiley_37.gif \ + qq_smiley_38.gif \ + qq_smiley_39.gif \ + qq_smiley_3.gif \ + qq_smiley_40.gif \ + qq_smiley_41.gif \ + qq_smiley_42.gif \ + qq_smiley_43.gif \ + qq_smiley_44.gif \ + qq_smiley_45.gif \ + qq_smiley_46.gif \ + qq_smiley_47.gif \ + qq_smiley_48.gif \ + qq_smiley_49.gif \ + qq_smiley_4.gif \ + qq_smiley_50.gif \ + qq_smiley_51.gif \ + qq_smiley_52.gif \ + qq_smiley_53.gif \ + qq_smiley_54.gif \ + qq_smiley_55.gif \ + qq_smiley_56.gif \ + qq_smiley_57.gif \ + qq_smiley_58.gif \ + qq_smiley_59.gif \ + qq_smiley_5.gif \ + qq_smiley_60.gif \ + qq_smiley_61.gif \ + qq_smiley_62.gif \ + qq_smiley_63.gif \ + qq_smiley_64.gif \ + qq_smiley_65.gif \ + qq_smiley_66.gif \ + qq_smiley_67.gif \ + qq_smiley_68.gif \ + qq_smiley_69.gif \ + qq_smiley_6.gif \ + qq_smiley_70.gif \ + qq_smiley_71.gif \ + qq_smiley_72.gif \ + qq_smiley_73.gif \ + qq_smiley_74.gif \ + qq_smiley_75.gif \ + qq_smiley_76.gif \ + qq_smiley_77.gif \ + qq_smiley_78.gif \ + qq_smiley_79.gif \ + qq_smiley_7.gif \ + qq_smiley_80.gif \ + qq_smiley_81.gif \ + qq_smiley_82.gif \ + qq_smiley_83.gif \ + qq_smiley_84.gif \ + qq_smiley_85.gif \ + qq_smiley_86.gif \ + qq_smiley_87.gif \ + qq_smiley_88.gif \ + qq_smiley_89.gif \ + qq_smiley_8.gif \ + qq_smiley_90.gif \ + qq_smiley_91.gif \ + qq_smiley_92.gif \ + qq_smiley_93.gif \ + qq_smiley_94.gif \ + qq_smiley_95.gif \ + qq_smiley_9.gif + YAHOO_SMILEYS = \ yahoo_alien.gif \ yahoo_alien2.gif \ @@ -194,6 +292,7 @@ $(AIM_SMILEYS) \ $(MSN_SMILEYS) \ $(YAHOO_SMILEYS) \ + $(QQ_SMILEYS) \ theme EXTRA_DIST = $(gaimsmileypix_DATA) Added: trunk/pixmaps/smileys/default/qq_smiley_0.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_0.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_1.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_1.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_10.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_10.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_11.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_11.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_12.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_12.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_13.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_13.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_14.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_14.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_15.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_15.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_16.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_16.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_17.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_17.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_18.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_18.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_19.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_19.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_2.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_2.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_20.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_20.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_21.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_21.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_22.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_22.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_23.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_23.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_24.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_24.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_25.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_25.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_26.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_26.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_27.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_27.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_28.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_28.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_29.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_29.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_3.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_3.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_30.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_30.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_31.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_31.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_32.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_32.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_33.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_33.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_34.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_34.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_35.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_35.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_36.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_36.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_37.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_37.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_38.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_38.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_39.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_39.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_4.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_4.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_40.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_40.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_41.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_41.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_42.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_42.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_43.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_43.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_44.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_44.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_45.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_45.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_46.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_46.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_47.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_47.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_48.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_48.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_49.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_49.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_5.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_5.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_50.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_50.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_51.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_51.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_52.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_52.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_53.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_53.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_54.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_54.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_55.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_55.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_56.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_56.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_57.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_57.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_58.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_58.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_59.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_59.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_6.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_6.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_60.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_60.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_61.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_61.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_62.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_62.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_63.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_63.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_64.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_64.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_65.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_65.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_66.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_66.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_67.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_67.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_68.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_68.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_69.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_69.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_7.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_7.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_70.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_70.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_71.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_71.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_72.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_72.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_73.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_73.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_74.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_74.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_75.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_75.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_76.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_76.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_77.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_77.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_78.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_78.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_79.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_79.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_8.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_8.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_80.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_80.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_81.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_81.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_82.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_82.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_83.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_83.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_84.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_84.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_85.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_85.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_86.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_86.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_87.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_87.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_88.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_88.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_89.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_89.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_9.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_9.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_90.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_90.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_91.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_91.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_92.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_92.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_93.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_93.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_94.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_94.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/pixmaps/smileys/default/qq_smiley_95.gif =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/smileys/default/qq_smiley_95.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/pixmaps/smileys/default/theme =================================================================== --- trunk/pixmaps/smileys/default/theme 2006-06-26 00:12:31 UTC (rev 16339) +++ trunk/pixmaps/smileys/default/theme 2006-06-26 02:58:54 UTC (rev 16340) @@ -37,7 +37,7 @@ msn_tongue.png :p :-P :P :-p msn_hot.png (h) (H) msn_angry.png :@ :-@ -msn_neutral.png :-| :| +msn_neutral.png :-| :| msn_weird.png :s :-S :-s :S msn_embarrassed.png :$ :-$ msn_sad.png :( :-( :-< @@ -110,6 +110,104 @@ msn_xbox.png (xx) msn_cigarette.gif (ci) +[QQ] +qq_smiley_0.gif /jy +qq_smiley_1.gif /se +qq_smiley_2.gif /pz +qq_smiley_3.gif /fd +qq_smiley_4.gif /dy +qq_smiley_5.gif /ll +qq_smiley_6.gif /hx +qq_smiley_7.gif /bz +qq_smiley_8.gif /shui +qq_smiley_9.gif /dk +qq_smiley_10.gif /gg +qq_smiley_11.gif /fn +qq_smiley_12.gif /tp +qq_smiley_13.gif /cy +qq_smiley_14.gif /wx +qq_smiley_15.gif /ng +qq_smiley_16.gif /kuk +qq_smiley_17.gif /feid +qq_smiley_18.gif /zk +qq_smiley_19.gif /tu +qq_smiley_20.gif /tx +qq_smiley_21.gif /ka +qq_smiley_22.gif /by +qq_smiley_23.gif /am +qq_smiley_24.gif /jie +qq_smiley_25.gif /kun +qq_smiley_26.gif /jk +qq_smiley_27.gif /lh +qq_smiley_28.gif /hanx +qq_smiley_29.gif /db +qq_smiley_30.gif /fendou +qq_smiley_31.gif /zhm +qq_smiley_32.gif /yiw +qq_smiley_33.gif /xu +qq_smiley_34.gif /yun +qq_smiley_35.gif /zhem +qq_smiley_36.gif /shuai +qq_smiley_37.gif /kl +qq_smiley_38.gif /qiao +qq_smiley_39.gif /zj +qq_smiley_40.gif /shan +qq_smiley_41.gif /fad +qq_smiley_42.gif /aiq +qq_smiley_43.gif /tiao +qq_smiley_44.gif /zhao +qq_smiley_45.gif /mm +qq_smiley_46.gif /zt +qq_smiley_47.gif /maom +qq_smiley_48.gif /xg +qq_smiley_49.gif /yb +qq_smiley_50.gif /qianc +qq_smiley_51.gif /dp +qq_smiley_52.gif /bei +qq_smiley_53.gif /dg +qq_smiley_54.gif /shd +qq_smiley_55.gif /zhd +qq_smiley_56.gif /dao +qq_smiley_57.gif /zq +qq_smiley_58.gif /yy +qq_smiley_59.gif /bb +qq_smiley_60.gif /gf +qq_smiley_61.gif /fan +qq_smiley_62.gif /yw +qq_smiley_63.gif /mg +qq_smiley_64.gif /dx +qq_smiley_65.gif /wen +qq_smiley_66.gif /xin +qq_smiley_67.gif /xs +qq_smiley_68.gif /hy +qq_smiley_69.gif /lw +qq_smiley_70.gif /dh +qq_smiley_71.gif /sj +qq_smiley_72.gif /yj +qq_smiley_73.gif /ds +qq_smiley_74.gif /ty +qq_smiley_75.gif /yl +qq_smiley_76.gif /qiang +qq_smiley_77.gif /ruo +qq_smiley_78.gif /ws +qq_smiley_79.gif /shl +qq_smiley_80.gif /dd +qq_smiley_81.gif /mn +qq_smiley_82.gif /hl +qq_smiley_83.gif /mamao +qq_smiley_84.gif /qz +qq_smiley_85.gif /fw +qq_smiley_86.gif /oh +qq_smiley_87.gif /bj +qq_smiley_88.gif /qsh +qq_smiley_89.gif /xig +qq_smiley_90.gif /xy +qq_smiley_91.gif /duoy +qq_smiley_92.gif /xr +qq_smiley_93.gif /xixing +qq_smiley_94.gif /nv +qq_smiley_95.gif /nan + [Yahoo] yahoo_angel.gif o:-) O:-) 0:-) yahoo_angry.gif X-( x-( X( x( Modified: trunk/pixmaps/status/default/Makefile.am =================================================================== --- trunk/pixmaps/status/default/Makefile.am 2006-06-26 00:12:31 UTC (rev 16339) +++ trunk/pixmaps/status/default/Makefile.am 2006-06-26 02:58:54 UTC (rev 16340) @@ -34,6 +34,7 @@ offline.png \ op.png \ pending.png \ + qq.png \ secure.png \ silc.png \ simple.png \ Added: trunk/pixmaps/status/default/qq.png =================================================================== (Binary files differ) Property changes on: trunk/pixmaps/status/default/qq.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/src/protocols/Makefile.am =================================================================== --- trunk/src/protocols/Makefile.am 2006-06-26 00:12:31 UTC (rev 16339) +++ trunk/src/protocols/Makefile.am 2006-06-26 02:58:54 UTC (rev 16340) @@ -1,3 +1,3 @@ -DIST_SUBDIRS = bonjour gg irc jabber msn napster novell oscar sametime silc toc simple yahoo zephyr +DIST_SUBDIRS = bonjour gg irc jabber msn napster novell oscar qq sametime silc toc simple yahoo zephyr SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS) Added: trunk/src/protocols/qq/Makefile.am =================================================================== --- trunk/src/protocols/qq/Makefile.am (rev 0) +++ trunk/src/protocols/qq/Makefile.am 2006-06-26 02:58:54 UTC (rev 16340) @@ -0,0 +1,108 @@ +EXTRA_DIST = \ + Makefile.mingw + +pkgdir = $(libdir)/gaim + +QQSOURCES = \ + utils.c \ + utils.h \ + packet_parse.c \ + packet_parse.h \ + buddy_info.c \ + buddy_info.h \ + buddy_list.c \ + buddy_list.h \ + buddy_opt.c \ + buddy_opt.h \ + buddy_status.c \ + buddy_status.h \ + qq.c \ + char_conv.c \ + char_conv.h \ + crypt.c \ + crypt.h \ + group_admindlg.c \ + group_admindlg.h \ + group.c \ + group_conv.c \ + group_conv.h \ + group_find.c \ + group_find.h \ + group_free.c \ + group_free.h \ + group.h \ + group_hash.c \ + group_hash.h \ + group_im.c \ + group_im.h \ + group_info.c \ + group_info.h \ + group_join.c \ + group_join.h \ + group_misc.c \ + group_misc.h \ + group_network.c \ + group_network.h \ + group_opt.c \ + group_opt.h \ + group_search.c \ + group_search.h \ + qq.h \ + header_info.c \ + header_info.h \ + im.c \ + im.h \ + infodlg.c \ + infodlg.h \ + ip_location.c \ + ip_location.h \ + keep_alive.c \ + keep_alive.h \ + login_logout.c \ + login_logout.h \ + qq_proxy.c \ + qq_proxy.h \ + recv_core.c \ + recv_core.h \ + send_core.c \ + send_core.h \ + sendqueue.c \ + sendqueue.h \ + show.c \ + show.h \ + sys_msg.c \ + sys_msg.h \ + udp_proxy_s5.c \ + udp_proxy_s5.h \ + send_file.c \ + send_file.h \ + file_trans.c \ + file_trans.h + +AM_CFLAGS = $(st) + +libqq_la_LDFLAGS = -module -avoid-version + +if STATIC_QQ + +st = -DGAIM_STATIC_PRPL +noinst_LIBRARIES = libqq.a +libqq_a_SOURCES = $(QQSOURCES) +libqq_a_CFLAGS = $(AM_CFLAGS) + +else + +st = +pkg_LTLIBRARIES = libqq.la +libqq_la_SOURCES = $(QQSOURCES) + +endif + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -DDATADIR=\"${datadir}\" \ + -DVERSION=\"$(VERSION)\" \ + $(DEBUG_CFLAGS) \ + $(GTK_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(GAIM_CFLAGS) Property changes on: trunk/src/protocols/qq/Makefile.am ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/src/protocols/qq/Makefile.in =================================================================== --- trunk/src/protocols/qq/Makefile.in (rev 0) +++ trunk/src/protocols/qq/Makefile.in 2006-06-26 02:58:54 UTC (rev 16340) @@ -0,0 +1,576 @@ +# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = ../../.. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +ALL_LINGUAS = @ALL_LINGUAS@ +AO_CFLAGS = @AO_CFLAGS@ +AO_LIBS = @AO_LIBS@ +AR = @AR@ +AS = @AS@ +AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ +AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ +AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ +BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ +BINRELOC_LIBS = @BINRELOC_LIBS@ +BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CFLAGS = @CFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +DATADIRNAME = @DATADIRNAME@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DBUS_SERVICES_DIR = @DBUS_SERVICES_DIR@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DYNALOADER_A = @DYNALOADER_A@ +DYNAMIC_PRPLS = @DYNAMIC_PRPLS@ +ECHO = @ECHO@ +EGREP = @EGREP@ +EVOLUTION_ADDRESSBOOK_CFLAGS = @EVOLUTION_ADDRESSBOOK_CFLAGS@ +EVOLUTION_ADDRESSBOOK_LIBS = @EVOLUTION_ADDRESSBOOK_LIBS@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +GADU_CFLAGS = @GADU_CFLAGS@ +GADU_LIBS = @GADU_LIBS@ +GCJ = @GCJ@ +GCJFLAGS = @GCJFLAGS@ +GENCAT = @GENCAT@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBC2 = @GLIBC2@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GNUTLS_CFLAGS = @GNUTLS_CFLAGS@ +GNUTLS_LIBS = @GNUTLS_LIBS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ +GSTREAMER_LIBS = @GSTREAMER_LIBS@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +HAVE_ASPRINTF = @HAVE_ASPRINTF@ +HAVE_LIB = @HAVE_LIB@ +HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ +HAVE_SNPRINTF = @HAVE_SNPRINTF@ +HAVE_WPRINTF = @HAVE_WPRINTF@ +HOWL_CFLAGS = @HOWL_CFLAGS@ +HOWL_LIBS = @HOWL_LIBS@ +INSTOBJEXT = @INSTOBJEXT@ +INTLBISON = @INTLBISON@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@ +INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@ +INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_ICONV = @INTLTOOL_ICONV@ +INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@ +INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@ +INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@ +INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@ +INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@ +INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@ +INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@ +INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@ +INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@ +INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@ +INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@ +INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@ +INTLTOOL_XGETTEXT = @INTLTOOL_XGETTEXT@ +INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@ +INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@ +INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +KRB4_CFLAGS = @KRB4_CFLAGS@ +KRB4_LDFLAGS = @KRB4_LDFLAGS@ +KRB4_LIBS = @KRB4_LIBS@ +LDADD = @LDADD@ +LIB = @LIB@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBPERL_A = @LIBPERL_A@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML_CFLAGS = @LIBXML_CFLAGS@ +LIBXML_LIBS = @LIBXML_LIBS@ +LN_S = @LN_S@ +LTLIB = @LTLIB@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +MAKEINFO = @MAKEINFO@ +MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ +MEANWHILE_LIBS = @MEANWHILE_LIBS@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO_CFLAGS = @MONO_CFLAGS@ +MONO_LIBS = @MONO_LIBS@ +NSS_CFLAGS = @NSS_CFLAGS@ +NSS_LIBS = @NSS_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +PERL_CFLAGS = @PERL_CFLAGS@ +PERL_LIBS = @PERL_LIBS@ +PERL_MM_PARAMS = @PERL_MM_PARAMS@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +RC = @RC@ +SASL_LIBS = @SASL_LIBS@ +SILC_CFLAGS = @SILC_CFLAGS@ +SILC_LIBS = @SILC_LIBS@ +SM_LIBS = @SM_LIBS@ +STARTUP_NOTIFICATION_CFLAGS = @STARTUP_NOTIFICATION_CFLAGS@ +STARTUP_NOTIFICATION_LIBS = @STARTUP_NOTIFICATION_LIBS@ +STATIC_LINK_LIBS = @STATIC_LINK_LIBS@ +STATIC_PRPLS = @STATIC_PRPLS@ +STRIP = @STRIP@ +TCL_CFLAGS = @TCL_CFLAGS@ +TCL_LIBS = @TCL_LIBS@ +TK_LIBS = @TK_LIBS@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XSS_LIBS = @XSS_LIBS@ +ZEPHYR_CFLAGS = @ZEPHYR_CFLAGS@ +ZEPHYR_LDFLAGS = @ZEPHYR_LDFLAGS@ +ZEPHYR_LIBS = @ZEPHYR_LIBS@ +enable_dbus = @enable_dbus@ +enable_dot = @enable_dot@ +enable_doxygen = @enable_doxygen@ +gaimpath = @gaimpath@ +perlpath = @perlpath@ +sedpath = @sedpath@ + +EXTRA_DIST = Makefile.mingw + + +pkgdir = $(libdir)/gaim + +QQSOURCES = utils.c utils.h packet_parse.c packet_parse.h buddy_info.c buddy_info.h buddy_list.c buddy_list.h buddy_opt.c buddy_opt.h buddy_status.c buddy_status.h qq.c char_conv.c char_conv.h crypt.c crypt.h group_admindlg.c group_admindlg.h group.c group_conv.c group_conv.h group_find.c group_find.h group_free.c group_free.h group.h group_hash.c group_hash.h group_im.c group_im.h group_info.c group_info.h group_join.c group_join.h group_misc.c group_misc.h group_network.c group_network.h group_opt.c group_opt.h group_search.c group_search.h qq.h header_info.c header_info.h im.c im.h infodlg.c infodlg.h ip_location.c ip_location.h keep_alive.c keep_alive.h login_logout.c login_logout.h qq_proxy.c qq_proxy.h recv_core.c recv_core.h send_core.c send_core.h sendqueue.c sendqueue.h show.c show.h sys... [truncated message content] |
From: <ebl...@us...> - 2006-06-27 21:55:56
|
Revision: 16361 Author: eblanton Date: 2006-06-27 14:55:47 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16361&view=rev Log Message: ----------- ------------------------------------------------------------------------ r16360 | eblanton | 2006-06-27 17:54:44 -0400 (Tue, 27 Jun 2006) | 1 line IRC support for CTCP VERSION from Andrej Krivul?\196?\141?\195?\173k ------------------------------------------------------------------------ Modified Paths: -------------- trunk/ChangeLog trunk/src/protocols/irc/cmds.c trunk/src/protocols/irc/irc.h trunk/src/protocols/irc/parse.c Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-06-27 21:54:44 UTC (rev 16360) +++ trunk/ChangeLog 2006-06-27 21:55:47 UTC (rev 16361) @@ -130,6 +130,7 @@ channel or change your nick * Added /nickserv, /memoserv, /chanserv and /operserv commands (Joao Luís Marques Pinto) + * Added CTCP VERSION via /version (Andrej Krivulčík) Jabber Features: * Support for SRV lookups Modified: trunk/src/protocols/irc/cmds.c =================================================================== --- trunk/src/protocols/irc/cmds.c 2006-06-27 21:54:44 UTC (rev 16360) +++ trunk/src/protocols/irc/cmds.c 2006-06-27 21:55:47 UTC (rev 16361) @@ -127,6 +127,21 @@ return 1; } +int irc_cmd_ctcp_version(struct irc_conn *irc, const char *cmd, const char *target, const char **args) +{ + char *buf; + + + if (!args || !args[0]) + return 0; + + buf = irc_format(irc, "vn:", "PRIVMSG", args[0], "\001VERSION\001"); + irc_send(irc, buf); + g_free(buf); + + return 0; +} + int irc_cmd_invite(struct irc_conn *irc, const char *cmd, const char *target, const char **args) { char *buf; Modified: trunk/src/protocols/irc/irc.h =================================================================== --- trunk/src/protocols/irc/irc.h 2006-06-27 21:54:44 UTC (rev 16360) +++ trunk/src/protocols/irc/irc.h 2006-06-27 21:55:47 UTC (rev 16361) @@ -152,6 +152,7 @@ int irc_cmd_default(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_away(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_ctcp_action(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_ctcp_version(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_invite(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_join(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_kick(struct irc_conn *irc, const char *cmd, const char *target, const char **args); Modified: trunk/src/protocols/irc/parse.c =================================================================== --- trunk/src/protocols/irc/parse.c 2006-06-27 21:54:44 UTC (rev 16360) +++ trunk/src/protocols/irc/parse.c 2006-06-27 21:55:47 UTC (rev 16361) @@ -140,6 +140,7 @@ { "time", "", irc_cmd_time, N_("time: Displays the current local time at the IRC server.") }, { "topic", ":", irc_cmd_topic, N_("topic [new topic]: View or change the channel topic.") }, { "umode", ":", irc_cmd_mode, N_("umode <+|-><A-Za-z>: Set or unset a user mode.") }, + { "version", ":", irc_cmd_ctcp_version, N_("version [nick]: send CTCP VERSION request to a user") }, { "voice", ":", irc_cmd_op, N_("voice <nick1> [nick2] ...: Grant channel voice status to someone. You must be a channel operator to do this.") }, { "wallops", ":", irc_cmd_wallops, N_("wallops <message>: If you don't know what this is, you probably can't use it.") }, { "whois", "tt", irc_cmd_whois, N_("whois [server] <nick>: Get information on a user.") }, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-07-24 05:08:39
|
Revision: 16559 Author: rlaager Date: 2006-07-23 22:08:30 -0700 (Sun, 23 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16559&view=rev Log Message: ----------- Change the log-timestamp and conversation-timestamp signals to pass around a time_t instead of a struct tm. Most of this changeset is Ethan's work. Modified Paths: -------------- trunk/configure.ac trunk/doc/gtkconv-signals.dox trunk/doc/log-signals.dox trunk/plugins/timestamp_format.c trunk/src/gtkconv.c trunk/src/log.c trunk/src/signals.c trunk/src/signals.h trunk/src/value.h Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/configure.ac 2006-07-24 05:08:30 UTC (rev 16559) @@ -60,6 +60,9 @@ dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_STRUCT_TM +AC_CHECK_SIZEOF(time_t, ,[ +#include <stdio.h> +#include <time.h>]) AC_C_BIGENDIAN Modified: trunk/doc/gtkconv-signals.dox =================================================================== --- trunk/doc/gtkconv-signals.dox 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/doc/gtkconv-signals.dox 2006-07-24 05:08:30 UTC (rev 16559) @@ -24,12 +24,12 @@ @signaldef conversation-timestamp @signalproto -char *(*conversation_timestamp)(GaimConversation *conv, struct tm *tm); +char *(*conversation_timestamp)(GaimConversation *conv, time_t when); @endsignalproto @signaldesc Emitted to allow plugins to customize the timestamp on a message. @param conv The conversation the message belongs to. - @param tm The time to be converted to a string. + @param when The time to be converted to a string. @return A textual representation of the time, or @c NULL to use a default format. @endsignaldef Modified: trunk/doc/log-signals.dox =================================================================== --- trunk/doc/log-signals.dox 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/doc/log-signals.dox 2006-07-24 05:08:30 UTC (rev 16559) @@ -8,13 +8,13 @@ @signaldef log-timestamp @signalproto -char *(*log_timestamp)(GaimConversation *conv, struct tm *tm); +char *(*log_timestamp)(GaimConversation *conv, time_t when); @endsignalproto @signaldesc Emitted to allow plugins to customize the timestamp on a message being logged. @param log The log the message belongs to. - @param tm The time to be converted to a string. + @param when The time to be converted to a string. @return A textual representation of the time, or @c NULL to use a default format. @note Plugins must be careful of logs with a type of GAIM_LOG_SYSTEM. Modified: trunk/plugins/timestamp_format.c =================================================================== --- trunk/plugins/timestamp_format.c 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/plugins/timestamp_format.c 2006-07-24 05:08:30 UTC (rev 16559) @@ -52,18 +52,18 @@ } static char *timestamp_cb_common(GaimConversation *conv, - const struct tm *tm, + time_t t, gboolean force, const char *dates) { + struct tm *tm = localtime(&t); g_return_val_if_fail(conv != NULL, NULL); - g_return_val_if_fail(tm != NULL, NULL); g_return_val_if_fail(dates != NULL, NULL); if (!strcmp(dates, "always") || (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT && !strcmp(dates, "chats")) || - (time(NULL) > (mktime((struct tm *)tm) + 20*60))) + (time(NULL) > (mktime(tm) + 20*60))) { if (force) return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm)); @@ -78,7 +78,7 @@ } static char *conversation_timestamp_cb(GaimConversation *conv, - const struct tm *tm, gpointer data) + time_t t, gpointer data) { gboolean force = gaim_prefs_get_bool( "/plugins/gtk/timestamp_format/force_24hr"); @@ -86,13 +86,11 @@ "/plugins/gtk/timestamp_format/use_dates/conversation"); g_return_val_if_fail(conv != NULL, NULL); - g_return_val_if_fail(tm != NULL, NULL); - return timestamp_cb_common(conv, tm, force, dates); + return timestamp_cb_common(conv, t, force, dates); } -static char *log_timestamp_cb(GaimLog *log, - const struct tm *tm, gpointer data) +static char *log_timestamp_cb(GaimLog *log, time_t t, gpointer data) { gboolean force = gaim_prefs_get_bool( "/plugins/gtk/timestamp_format/force_24hr"); @@ -100,17 +98,18 @@ "/plugins/gtk/timestamp_format/use_dates/log"); g_return_val_if_fail(log != NULL, NULL); - g_return_val_if_fail(tm != NULL, NULL); if (log->type == GAIM_LOG_SYSTEM) { - if (force) + if (force) { + struct tm *tm = localtime(&t); return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm)); - else + } else { return NULL; + } } - return timestamp_cb_common(log->conv, tm, force, dates); + return timestamp_cb_common(log->conv, t, force, dates); } static gboolean Modified: trunk/src/gtkconv.c =================================================================== --- trunk/src/gtkconv.c 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/src/gtkconv.c 2006-07-24 05:08:30 UTC (rev 16559) @@ -4691,7 +4691,6 @@ GaimConversationType type; char *displaying; gboolean plugin_return; - struct tm tm; g_return_if_fail(conv != NULL); gtkconv = GAIM_GTK_CONVERSATION(conv); @@ -4776,16 +4775,16 @@ if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml)))) gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", gtk_font_options_all); - tm = *(localtime(&mtime)); mdate = gaim_signal_emit_return_1(gaim_gtk_conversations_get_handle(), "conversation-timestamp", - conv, &tm); + conv, mtime); if (mdate == NULL) { + struct tm *tm = localtime(&mtime); if (time(NULL) > mtime + 20*60) /* show date if older than 20 minutes */ - mdate = g_strdup(gaim_date_format_long(&tm)); + mdate = g_strdup(gaim_date_format_long(tm)); else - mdate = g_strdup(gaim_time_format(&tm)); + mdate = g_strdup(gaim_time_format(tm)); } sml_attrib = g_strdup_printf("sml=\"%s\"", gaim_account_get_protocol_name(account)); @@ -6576,11 +6575,17 @@ "GaimGtkWindow *")); gaim_signal_register(handle, "conversation-timestamp", - gaim_marshal_POINTER__POINTER_POINTER, +#if SIZEOF_TIME_T == 4 + gaim_marshal_POINTER__POINTER_INT, +#elif SIZEOF_TIME_T == 8 + gaim_marshal_POINTER__POINTER_INT64, +#else +# error Unknown size of time_t +#endif gaim_value_new(GAIM_TYPE_POINTER), 2, gaim_value_new(GAIM_TYPE_SUBTYPE, - GAIM_SUBTYPE_CONVERSATION), - gaim_value_new(GAIM_TYPE_POINTER)); + GAIM_SUBTYPE_LOG), + gaim_value_new(GAIM_TYPE_TIME_T)); gaim_signal_register(handle, "displaying-im-msg", gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER, Modified: trunk/src/log.c =================================================================== --- trunk/src/log.c 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/src/log.c 2006-07-24 05:08:30 UTC (rev 16559) @@ -594,12 +594,17 @@ gaim_log_logger_add(old_logger); gaim_signal_register(handle, "log-timestamp", - gaim_marshal_POINTER__POINTER_POINTER, +#if SIZEOF_TIME_T == 4 + gaim_marshal_POINTER__POINTER_INT, +#elif SIZEOF_TIME_T == 8 + gaim_marshal_POINTER__POINTER_INT64, +#else +# error Unknown size of time_t +#endif gaim_value_new(GAIM_TYPE_POINTER), 2, gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_LOG), - gaim_value_new(GAIM_TYPE_BOXED, - "struct tm *")); + gaim_value_new(GAIM_TYPE_TIME_T)); gaim_prefs_connect_callback(NULL, "/core/logging/format", logger_pref_cb, NULL); @@ -623,14 +628,15 @@ static char *log_get_timestamp(GaimLog *log, time_t when) { char *date; - struct tm tm = *(localtime(&when)); + struct tm tm; date = gaim_signal_emit_return_1(gaim_log_get_handle(), "log-timestamp", - log, &tm); + log, when); if (date != NULL) return date; + tm = *(localtime(&when)); if (log->type == GAIM_LOG_SYSTEM || time(NULL) > when + 20*60) return g_strdup(gaim_date_format_long(&tm)); else Modified: trunk/src/signals.c =================================================================== --- trunk/src/signals.c 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/src/signals.c 2006-07-24 05:08:30 UTC (rev 16559) @@ -955,6 +955,36 @@ } void +gaim_marshal_POINTER__POINTER_INT( + GaimCallback cb, va_list args, void *data, + void **return_val) +{ + gpointer ret_val; + void *arg1 = va_arg(args, void *); + gint arg2 = va_arg(args, gint); + + ret_val = ((gpointer(*)(void *, gint, void *))cb)(arg1, arg2, data); + + if (return_val != NULL) + *return_val = ret_val; +} + +void +gaim_marshal_POINTER__POINTER_INT64( + GaimCallback cb, va_list args, void *data, + void **return_val) +{ + gpointer ret_val; + void *arg1 = va_arg(args, void *); + gint64 arg2 = va_arg(args, gint64); + + ret_val = ((gpointer(*)(void *, gint64, void *))cb)(arg1, arg2, data); + + if (return_val != NULL) + *return_val = ret_val; +} + +void gaim_marshal_POINTER__POINTER_POINTER(GaimCallback cb, va_list args, void *data, void **return_val) { Modified: trunk/src/signals.h =================================================================== --- trunk/src/signals.h 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/src/signals.h 2006-07-24 05:08:30 UTC (rev 16559) @@ -327,6 +327,10 @@ void gaim_marshal_BOOLEAN__INT_POINTER( GaimCallback cb, va_list args, void *data, void **return_val); +void gaim_marshal_POINTER__POINTER_INT( + GaimCallback cb, va_list args, void *data, void **return_val); +void gaim_marshal_POINTER__POINTER_INT64( + GaimCallback cb, va_list args, void *data, void **return_val); void gaim_marshal_POINTER__POINTER_POINTER( GaimCallback cb, va_list args, void *data, void **return_val); /*@}*/ Modified: trunk/src/value.h =================================================================== --- trunk/src/value.h 2006-07-24 05:07:59 UTC (rev 16558) +++ trunk/src/value.h 2006-07-24 05:08:30 UTC (rev 16559) @@ -26,6 +26,7 @@ #define _GAIM_VALUE_H_ #include <glib.h> +#include "config.h" /** * Specific value types. @@ -53,6 +54,16 @@ } GaimType; +/* time_t is normally either an int or a uint; this is a little ugly + * and probably deserves revisiting. */ +#if SIZEOF_TIME_T == 8 +# define GAIM_TYPE_TIME_T GAIM_TYPE_INT64 +#else +# define GAIM_TYPE_TIME_T GAIM_TYPE_INT +#endif /* sizeof(time_t) == 8 */ + + + /** * Gaim-specific subtype values. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ebl...@us...> - 2006-07-27 18:58:46
|
Revision: 16585 Author: eblanton Date: 2006-07-27 11:58:14 -0700 (Thu, 27 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16585&view=rev Log Message: ----------- A fix for the nasty libxml corruption crash in jabber, from Henning Nor?\195?\169n. Modified Paths: -------------- trunk/COPYRIGHT trunk/src/protocols/jabber/jabber.c trunk/src/protocols/jabber/jabber.h Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-07-27 18:35:16 UTC (rev 16584) +++ trunk/COPYRIGHT 2006-07-27 18:58:14 UTC (rev 16585) @@ -195,6 +195,7 @@ Richard Nelson Dennis Nezic Matthew A. Nicholson +Henning Norén Szilard Novaki Novell Padraig O'Briain Modified: trunk/src/protocols/jabber/jabber.c =================================================================== --- trunk/src/protocols/jabber/jabber.c 2006-07-27 18:35:16 UTC (rev 16584) +++ trunk/src/protocols/jabber/jabber.c 2006-07-27 18:58:14 UTC (rev 16585) @@ -66,6 +66,7 @@ /* setup the parser fresh for each stream */ jabber_parser_setup(js); jabber_send_raw(js, open_stream, -1); + js->reinit = FALSE; g_free(open_stream); } @@ -354,6 +355,8 @@ buf[len] = '\0'; gaim_debug(GAIM_DEBUG_INFO, "jabber", "Recv (ssl)(%d): %s\n", len, buf); jabber_parser_process(js, buf, len); + if(js->reinit) + jabber_stream_init(js); } if(errno == EAGAIN) @@ -1009,7 +1012,7 @@ case JABBER_STREAM_REINITIALIZING: gaim_connection_update_progress(js->gc, _("Re-initializing Stream"), 6, JABBER_CONNECT_STEPS); - jabber_stream_init(js); + js->reinit = TRUE; break; case JABBER_STREAM_CONNECTED: jabber_roster_request(js); Modified: trunk/src/protocols/jabber/jabber.h =================================================================== --- trunk/src/protocols/jabber/jabber.h 2006-07-27 18:35:16 UTC (rev 16584) +++ trunk/src/protocols/jabber/jabber.h 2006-07-27 18:58:14 UTC (rev 16585) @@ -121,6 +121,8 @@ GaimCircBuffer *write_buffer; guint writeh; + gboolean reinit; + /* OK, this stays at the end of the struct, so plugins can depend * on the rest of the stuff being in the right place */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-01 00:05:28
|
Revision: 16604 Author: sadrul Date: 2006-07-31 17:05:14 -0700 (Mon, 31 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16604&view=rev Log Message: ----------- Let's have a man-page for gntgaim. Modified Paths: -------------- trunk/configure.ac trunk/doc/Makefile.am Added Paths: ----------- trunk/doc/gntgaim.1.in Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-07-31 23:56:35 UTC (rev 16603) +++ trunk/configure.ac 2006-08-01 00:05:14 UTC (rev 16604) @@ -1747,6 +1747,7 @@ gaim.service doc/Makefile doc/gaim.1 + doc/gntgaim.1 m4macros/Makefile pixmaps/Makefile pixmaps/smileys/Makefile Modified: trunk/doc/Makefile.am =================================================================== --- trunk/doc/Makefile.am 2006-07-31 23:56:35 UTC (rev 16603) +++ trunk/doc/Makefile.am 2006-08-01 00:05:14 UTC (rev 16604) @@ -1,4 +1,4 @@ -man_MANS = gaim.1 +man_MANS = gaim.1 gntgaim.1 EXTRA_DIST = \ C-HOWTO.dox \ @@ -15,6 +15,7 @@ dbus-server-signals.dox \ gaim.1.in \ gaims_funniest_home_convos.txt \ + gntgaim.1.in \ gtkaccount-signals.dox \ gtkblist-signals.dox \ gtkconv-signals.dox \ Added: trunk/doc/gntgaim.1.in =================================================================== --- trunk/doc/gntgaim.1.in (rev 0) +++ trunk/doc/gntgaim.1.in 2006-08-01 00:05:14 UTC (rev 16604) @@ -0,0 +1,177 @@ +.\" Copyright (c) 2006, Sadrul Habib Chowdhury <sa...@us...> +.\" +.\" This is free documentation; you can redistribute it and/or +.\" modify it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; either version 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public +.\" License along with this manual; if not, write to the Free +.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, +.\" USA. +.TH gntgaim 1 +.SH NAME +GntGaim \- Console frontend for Instant Messaging client Gaim. +.SH SYNOPSIS +.TP 5 +\fBgntgaim \fI[options]\fR + +.SH DESCRIPTION +.PP +\fBgntgaim\fR is a console-based frontend for Instant Messaging (IM) +application Gaim. It supports multiple protocols via modules, including AIM, +ICQ, Yahoo!, MSN, Jabber, IRC, Napster, Gadu-Gadu and Zephyr. It has many +common features found in other clients, as well as many unique features. Gaim +is not endorsed by or affiliated with America Online, ICQ, Microsoft, or Yahoo. + +.SH OPTIONS +The following options are provided by \fBgntgaim\fR using the standard GNU +command line syntax: +.TP +.B \-d, \-\-debug +Print debugging messages to stdout. These are the same debugging messages +that are displayed in the \fBDebug\fR window. +.TP +.B \-c, \-\-config=\fIDIR\fB +Use \fIDIR\fR as the directory for config files instead of \fI~/.gaim\fR. +.TP +.B \-h, \-\-help +Print this help and exit. +.TP +.B \-n, \-\-nologin +Don't automatically login when \fBgntgaim\fR starts. Sets all accounts to +Offline. +.TP +.B \-v, \-\-version +Display the version information window. + +.SH GNT Shortcuts +You can use the following shortcuts: +.TP +.B Alt \+ n +Go to the next window. +.TP +.B Alt \+ p +Go to the previous window. +.TP +.B Alt \+ w +Show the list of windows. You can select and jump to any window from the list. +.TP +.B Alt \+ c +Close the current window. +.TP +.B Alt \+ q +Quit. +.TP +.B Alt \+ m +Start moving a window. Press the cursor keys to move the window. When you are +done, press \fBEnter\fR or \fBEscape\fR. +.TP +.B Alt \+ r +Start resizing a window. Press the cursor keys to resize the window. When you +are done, press \fBEnter\fR or \fBEscape\fR. + +.SH FILES +\fI~/.gntrc\fR: configuration file for gnt applications. +.br +.TP +A sample file looks like: +.br +[general] +.br +shadow = 0 +.br + +.br +[colors] +.br +# The RGB values range in [0, 1000] +.br +black = 0; 0; 0 +.br +red = 1000; 0; 0 +.br +green = 0; 1000; 0 +.br +blue = 250; 250; 700 +.br +white = 1000; 1000; 1000 +.br +gray = 700; 700; 700 +.br +darkgray = 256; 256; 256 +.br + +.br +[colorpairs] +.br +normal = white; black +.br +highlight = white; blue +.br +highlightd = black; gray +.br +shadow = black; darkgray +.br +title = white; blue +.br +titled = white; gray +.br +text = white; blue +.br +disabled = gray; black +.br + +.SH BUGS +Known bugs are listed at +.br +\fIhttp://sourceforge.net/tracker/?group_id=235&atid=100235\fR + +.SH PATCHES +If you fix a bug in \fBgntgaim\fR (or otherwise enhance it), please submit a +patch (using \fIcvs diff -up > my.diff\fR against the latest CVS version) +at +.br +\fIhttp://sourceforge.net/tracker/?func=add&group_id=235&atid=300235\fR + +Before sending a bug report, please verify that you have the latest +version of \fBgntgaim\fR. Many bugs (major and minor) are fixed +at each release, and if yours is out of date, the problem may already +have been solved. + +.SH SEE ALSO +\fIhttp://gaim.sourceforge.net/\fR +.br +\fIhttp://www.sourceforge.net/projects/gaim/\fR + +.SH LICENSE +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +\fBWITHOUT ANY WARRANTY\fR; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +.SH AUTHORS +Sadrul Habib Chowdhury <\fIs...@us...\fR> +.br + +This manpage was written by Sadrul Habib Chowdhury <\fIs...@us...\fR>. + Property changes on: trunk/doc/gntgaim.1.in ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-03 09:17:08
|
Revision: 16626 Author: thekingant Date: 2006-08-03 02:17:05 -0700 (Thu, 03 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16626&view=rev Log Message: ----------- Hopefully load non-ASCII aliases from our SSI information correctly more often with AIM/ICQ. Mattias Eriksson helped with this patch Modified Paths: -------------- trunk/COPYRIGHT trunk/src/protocols/oscar/oscar.c Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-08-03 07:58:11 UTC (rev 16625) +++ trunk/COPYRIGHT 2006-08-03 09:17:05 UTC (rev 16626) @@ -86,6 +86,7 @@ Nelson Elhage Ignacio J. Elia Brian Enigma +Mattias Eriksson Stefan Esser Steffen Eschenbacher Marc Etcheverry Modified: trunk/src/protocols/oscar/oscar.c =================================================================== --- trunk/src/protocols/oscar/oscar.c 2006-08-03 07:58:11 UTC (rev 16625) +++ trunk/src/protocols/oscar/oscar.c 2006-08-03 09:17:05 UTC (rev 16626) @@ -4786,7 +4786,18 @@ char *gname = aim_ssi_itemlist_findparentname(od->ssi.local, curitem->name); char *gname_utf8 = gname ? oscar_utf8_try_convert(gc->account, gname) : NULL; char *alias = aim_ssi_getalias(od->ssi.local, gname, curitem->name); - char *alias_utf8 = alias ? oscar_utf8_try_convert(gc->account, alias) : NULL; + char *alias_utf8; + + if (alias != NULL) + { + if (g_utf8_validate(alias, -1, NULL)) + alias_utf8 = g_strdup(alias); + else + alias_utf8 = oscar_utf8_try_convert(account, alias); + } + else + alias_utf8 = NULL; + b = gaim_find_buddy(gc->account, curitem->name); /* Should gname be freed here? -- elb */ /* Not with the current code, but that might be cleaner -- med */ @@ -4946,8 +4957,18 @@ gname = aim_ssi_itemlist_findparentname(od->ssi.local, name); gname_utf8 = gname ? oscar_utf8_try_convert(gc->account, gname) : NULL; + alias = aim_ssi_getalias(od->ssi.local, gname, name); - alias_utf8 = alias ? oscar_utf8_try_convert(gc->account, alias) : NULL; + if (alias != NULL) + { + if (g_utf8_validate(alias, -1, NULL)) + alias_utf8 = g_strdup(alias); + else + alias_utf8 = oscar_utf8_try_convert(gaim_connection_get_account(gc), alias); + } + else + alias_utf8 = NULL; + b = gaim_find_buddy(gc->account, name); g_free(alias); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-05 08:45:25
|
Revision: 16640 Author: thekingant Date: 2006-08-05 01:45:20 -0700 (Sat, 05 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16640&view=rev Log Message: ----------- Remove the Napster PRPL Modified Paths: -------------- trunk/ChangeLog trunk/Makefile.mingw trunk/configure.ac trunk/pixmaps/status/default/Makefile.am trunk/po/POTFILES.in trunk/src/protocols/Makefile.am Removed Paths: ------------- trunk/pixmaps/status/default/napster.png trunk/src/protocols/napster/ Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-08-05 08:29:11 UTC (rev 16639) +++ trunk/ChangeLog 2006-08-05 08:45:20 UTC (rev 16640) @@ -152,6 +152,7 @@ * SIP/SIMPLE support (Thomas Butter, Google Summer of Code) * Sametime protocol support Requires the meanwhile library: http://meanwhile.sourceforge.net + * Removed support for the napster and toc protocols Other Noteworthy Changes: * UPnP and NAT traversal support (Adam J. Warrington, Google Summer of Modified: trunk/Makefile.mingw =================================================================== --- trunk/Makefile.mingw 2006-08-05 08:29:11 UTC (rev 16639) +++ trunk/Makefile.mingw 2006-08-05 08:45:20 UTC (rev 16640) @@ -21,7 +21,6 @@ TOC = $(GAIM_PROTOS)/toc IRC = $(GAIM_PROTOS)/irc JABBER = $(GAIM_PROTOS)/jabber -NAPSTER = $(GAIM_PROTOS)/napster GG = $(GAIM_PROTOS)/gg NOVELL = $(GAIM_PROTOS)/novell SILC = $(GAIM_PROTOS)/silc Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-08-05 08:29:11 UTC (rev 16639) +++ trunk/configure.ac 2006-08-05 08:45:20 UTC (rev 16640) @@ -1777,7 +1777,6 @@ src/protocols/irc/Makefile src/protocols/jabber/Makefile src/protocols/msn/Makefile - src/protocols/napster/Makefile src/protocols/novell/Makefile src/protocols/oscar/Makefile src/protocols/qq/Makefile Modified: trunk/pixmaps/status/default/Makefile.am =================================================================== --- trunk/pixmaps/status/default/Makefile.am 2006-08-05 08:29:11 UTC (rev 16639) +++ trunk/pixmaps/status/default/Makefile.am 2006-08-05 08:45:20 UTC (rev 16640) @@ -26,7 +26,6 @@ male.png \ meanwhile.png \ msn.png \ - napster.png \ notauthorized.png \ novell.png \ occupied.png \ Deleted: trunk/pixmaps/status/default/napster.png =================================================================== (Binary files differ) Modified: trunk/po/POTFILES.in =================================================================== --- trunk/po/POTFILES.in 2006-08-05 08:29:11 UTC (rev 16639) +++ trunk/po/POTFILES.in 2006-08-05 08:45:20 UTC (rev 16640) @@ -108,7 +108,6 @@ src/protocols/msn/state.c src/protocols/msn/switchboard.c src/protocols/msn/userlist.c -src/protocols/napster/napster.c src/protocols/novell/nmuser.c src/protocols/novell/novell.c src/protocols/oscar/flap_connection.c Modified: trunk/src/protocols/Makefile.am =================================================================== --- trunk/src/protocols/Makefile.am 2006-08-05 08:29:11 UTC (rev 16639) +++ trunk/src/protocols/Makefile.am 2006-08-05 08:45:20 UTC (rev 16640) @@ -1,3 +1,3 @@ -DIST_SUBDIRS = bonjour gg irc jabber msn napster novell oscar qq sametime silc toc simple yahoo zephyr +DIST_SUBDIRS = bonjour gg irc jabber msn novell oscar qq sametime silc toc simple yahoo zephyr SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-05 17:40:58
|
Revision: 16650 Author: thekingant Date: 2006-08-05 10:40:38 -0700 (Sat, 05 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16650&view=rev Log Message: ----------- Remove "Napster" from a few more places Modified Paths: -------------- trunk/Makefile.mingw trunk/doc/gaim.1.in trunk/doc/gntgaim.1.in trunk/gaim.spec.in trunk/src/gtkdialogs.c Modified: trunk/Makefile.mingw =================================================================== --- trunk/Makefile.mingw 2006-08-05 17:34:37 UTC (rev 16649) +++ trunk/Makefile.mingw 2006-08-05 17:40:38 UTC (rev 16650) @@ -54,7 +54,6 @@ TOC_TYPE = PLUGIN IRC_TYPE = PLUGIN JABBER_TYPE = PLUGIN -NAPSTER_TYPE = PLUGIN GG_TYPE = PLUGIN NOVELL_TYPE = PLUGIN SILC_TYPE = PLUGIN @@ -68,7 +67,6 @@ $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw - $(MAKE) TYPE='$(NAPSTER_TYPE)' -C $(NAPSTER) -f Makefile.mingw $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw $(MAKE) TYPE='$(NOVELL_TYPE)' -C $(NOVELL) -f Makefile.mingw $(MAKE) TYPE='$(SILC_TYPE)' -C $(SILC) -f Makefile.mingw @@ -90,7 +88,6 @@ $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw install $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw install $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw install - $(MAKE) TYPE='$(NAPSTER_TYPE)' -C $(NAPSTER) -f Makefile.mingw install $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw install $(MAKE) TYPE='$(NOVELL_TYPE)' -C $(NOVELL) -f Makefile.mingw install $(MAKE) TYPE='$(SILC_TYPE)' -C $(SILC) -f Makefile.mingw install @@ -118,7 +115,6 @@ $(MAKE) -C $(MSN) -f Makefile.mingw clean $(MAKE) -C $(IRC) -f Makefile.mingw clean $(MAKE) -C $(JABBER) -f Makefile.mingw clean - $(MAKE) -C $(NAPSTER) -f Makefile.mingw clean $(MAKE) -C $(GG) -f Makefile.mingw clean $(MAKE) -C $(NOVELL) -f Makefile.mingw clean $(MAKE) -C $(SILC) -f Makefile.mingw clean Modified: trunk/doc/gaim.1.in =================================================================== --- trunk/doc/gaim.1.in 2006-08-05 17:34:37 UTC (rev 16649) +++ trunk/doc/gaim.1.in 2006-08-05 17:40:38 UTC (rev 16650) @@ -30,7 +30,7 @@ .PP \fBgaim\fR is a GTK2-based Instant Messaging (IM) application. It supports multiple protocols via modules, including AIM, ICQ, Yahoo!, MSN, Jabber, -IRC, Napster, Gadu-Gadu and Zephyr. It has many common features found in +IRC, Gadu-Gadu and Zephyr. It has many common features found in other clients, as well as many unique features. Gaim is not endorsed by or affiliated with America Online, ICQ, Microsoft, or Yahoo. Modified: trunk/doc/gntgaim.1.in =================================================================== --- trunk/doc/gntgaim.1.in 2006-08-05 17:34:37 UTC (rev 16649) +++ trunk/doc/gntgaim.1.in 2006-08-05 17:40:38 UTC (rev 16650) @@ -30,7 +30,7 @@ .PP \fBgntgaim\fR is a console-based frontend for Instant Messaging (IM) application Gaim. It supports multiple protocols via modules, including AIM, -ICQ, Yahoo!, MSN, Jabber, IRC, Napster, Gadu-Gadu and Zephyr. It has many +ICQ, Yahoo!, MSN, Jabber, IRC, Gadu-Gadu and Zephyr. It has many common features found in other clients, as well as many unique features. Gaim is not endorsed by or affiliated with America Online, ICQ, Microsoft, or Yahoo. Modified: trunk/gaim.spec.in =================================================================== --- trunk/gaim.spec.in 2006-08-05 17:34:37 UTC (rev 16649) +++ trunk/gaim.spec.in 2006-08-05 17:40:38 UTC (rev 16650) @@ -112,7 +112,7 @@ %description Gaim allows you to talk to anyone using a variety of messaging protocols, including AIM, ICQ, IRC, Yahoo!, Novell Groupwise, MSN -Messenger, Jabber, Gadu-Gadu, Napster, Lotus Sametime and Zephyr. +Messenger, Jabber, Gadu-Gadu, Lotus Sametime and Zephyr. These protocols are implemented using a modular, easy to use design. To use a protocol, just add an account using the account editor. Modified: trunk/src/gtkdialogs.c =================================================================== --- trunk/src/gtkdialogs.c 2006-08-05 17:34:37 UTC (rev 16649) +++ trunk/src/gtkdialogs.c 2006-08-05 17:40:38 UTC (rev 16650) @@ -268,7 +268,7 @@ g_string_append(str, _("Gaim is a modular messaging client capable of using " "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, " - "Novell GroupWise, Lotus Sametime, Napster, Zephyr, and Gadu-Gadu " + "Novell GroupWise, Lotus Sametime, Zephyr, and Gadu-Gadu " "all at once. It is written using GTK+.<BR><BR>" "You may modify and redistribute the program under " "the terms of the GPL (version 2 or later). A copy of the GPL is " This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lsc...@us...> - 2006-08-09 14:48:07
|
Revision: 16679 Author: lschiere Date: 2006-08-09 07:47:37 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16679&view=rev Log Message: ----------- some translation updates. I have questions about gu.po, if someone sees that answered, we might need to revert that part of the change. It is all very confusing. The same person submitted the original gu.po and this update, but he called it gu_IN this time?\226?\128?\166 Modified Paths: -------------- trunk/configure.ac trunk/po/ChangeLog trunk/po/de.po trunk/po/fi.po trunk/po/gl.po trunk/po/gu.po trunk/po/it.po trunk/po/sl.po trunk/po/zh_TW.po trunk/src/gtkdialogs.c Added Paths: ----------- trunk/po/ne.po Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-08-09 06:23:18 UTC (rev 16678) +++ trunk/configure.ac 2006-08-09 14:47:37 UTC (rev 16679) @@ -46,7 +46,7 @@ ;; esac -ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" +ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" AM_GLIB_GNU_GETTEXT dnl we don't use autobreak on cygwin!! Modified: trunk/po/ChangeLog =================================================================== --- trunk/po/ChangeLog 2006-08-09 06:23:18 UTC (rev 16678) +++ trunk/po/ChangeLog 2006-08-09 14:47:37 UTC (rev 16679) @@ -23,13 +23,16 @@ * German translation updated (Bjoern Voigt) * German win32 translation updated (Bjoern Voigt) * Greek translation added (Bouklis Panos) + * Gujarati translation updated (Ankit Patel) * Hebrew translation updated (Shalom Craimer) * Hungarian translation updated (Gabor Kelemen) + * Italian translation updated (Claudio Satriano) * Japanese translation updated (Takeshi Aihana) * Kurdish translation added (Erdal Ronahi and Amed Ç. Jiyan) * Kurdish win32 installer translation added (Erdal Ronahi) * Lithuanian translation updated (Andrius Štikonas, Laurynas Biveinis) * Lithuanian win32 translation added (Laurynas Biveinis) + * Nepali translation added (Shyam Krishna Bal) * Persian translation added (Elnaz Sarbar, Meelad Zakaria) * Polish translation updated (Emil Nowak) * Portuguese translation updated (Duarte Henriques) Modified: trunk/po/de.po =================================================================== --- trunk/po/de.po 2006-08-09 06:23:18 UTC (rev 16678) +++ trunk/po/de.po 2006-08-09 14:47:37 UTC (rev 16679) @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: Gaim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-04-29 23:34+0200\n" -"PO-Revision-Date: 2006-04-29 23:33+0200\n" +"POT-Creation-Date: 2006-06-20 10:30+0200\n" +"PO-Revision-Date: 2006-06-20 10:38+0200\n" "Last-Translator: Björn Voigt <bj...@cs...>\n" "Language-Team: de <de...@li...>\n" "MIME-Version: 1.0\n" @@ -196,7 +196,7 @@ msgid "Right-click for more unread messages...\n" msgstr "Rechtsklicken für weitere ungelesene Nachrichten...\n" -#: ../plugins/docklet/docklet.c:157 ../src/gtkblist.c:3230 +#: ../plugins/docklet/docklet.c:157 ../src/gtkblist.c:3246 #, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" @@ -208,10 +208,10 @@ msgstr "Ändere Status" #: ../plugins/docklet/docklet.c:435 ../src/gtkstatusbox.c:673 -#: ../src/protocols/gg/gg.c:996 ../src/protocols/jabber/buddy.c:1104 +#: ../src/protocols/gg/gg.c:996 ../src/protocols/jabber/buddy.c:1363 #: ../src/protocols/msn/state.c:29 ../src/protocols/msn/state.c:30 #: ../src/protocols/msn/state.c:37 ../src/protocols/msn/state.c:38 -#: ../src/protocols/novell/novell.c:2845 ../src/protocols/yahoo/yahoo.c:2733 +#: ../src/protocols/novell/novell.c:2843 ../src/protocols/yahoo/yahoo.c:2731 #: ../src/status.c:155 msgid "Available" msgstr "Verfügbar" @@ -222,25 +222,25 @@ #: ../plugins/docklet/docklet.c:439 ../src/gtkprefs.c:1774 #: ../src/gtkstatusbox.c:674 ../src/protocols/gg/gg.c:999 #: ../src/protocols/irc/irc.c:520 ../src/protocols/irc/msgs.c:223 -#: ../src/protocols/jabber/buddy.c:1108 ../src/protocols/novell/novell.c:2848 -#: ../src/protocols/oscar/oscar.c:719 ../src/protocols/oscar/oscar.c:4391 -#: ../src/protocols/oscar/oscar.c:5434 ../src/protocols/silc/buddy.c:1469 -#: ../src/protocols/yahoo/yahoo.c:3187 ../src/protocols/yahoo/yahoo.c:3260 +#: ../src/protocols/jabber/buddy.c:1367 ../src/protocols/novell/novell.c:2846 +#: ../src/protocols/oscar/oscar.c:719 ../src/protocols/oscar/oscar.c:4397 +#: ../src/protocols/oscar/oscar.c:5440 ../src/protocols/silc/buddy.c:1469 +#: ../src/protocols/yahoo/yahoo.c:3185 ../src/protocols/yahoo/yahoo.c:3258 #: ../src/status.c:158 msgid "Away" msgstr "Abwesend" #: ../plugins/docklet/docklet.c:443 ../src/gtkstatusbox.c:675 -#: ../src/protocols/oscar/oscar.c:723 ../src/protocols/yahoo/yahoo.c:2727 +#: ../src/protocols/oscar/oscar.c:723 ../src/protocols/yahoo/yahoo.c:2725 #: ../src/status.c:157 msgid "Invisible" msgstr "Unsichtbar" -#: ../plugins/docklet/docklet.c:447 ../src/gtkblist.c:2960 +#: ../plugins/docklet/docklet.c:447 ../src/gtkblist.c:2976 #: ../src/gtkstatusbox.c:676 ../src/protocols/gg/gg.c:993 -#: ../src/protocols/jabber/buddy.c:1102 ../src/protocols/novell/novell.c:2857 -#: ../src/protocols/oscar/oscar.c:785 ../src/protocols/oscar/oscar.c:5406 -#: ../src/protocols/yahoo/yahoo.c:2731 ../src/status.c:154 +#: ../src/protocols/jabber/buddy.c:1361 ../src/protocols/novell/novell.c:2855 +#: ../src/protocols/oscar/oscar.c:785 ../src/protocols/oscar/oscar.c:5412 +#: ../src/protocols/yahoo/yahoo.c:2729 ../src/status.c:154 msgid "Offline" msgstr "Offline" @@ -256,7 +256,7 @@ msgid "Show Buddy List" msgstr "Buddy-Liste anzeigen" -#: ../plugins/docklet/docklet.c:489 ../src/gtkconv.c:5626 +#: ../plugins/docklet/docklet.c:489 ../src/gtkconv.c:5675 msgid "Unread Messages" msgstr "Ungelesene Nachrichten" @@ -296,7 +296,7 @@ msgstr "_Sofortnachrichten:" #: ../plugins/docklet/docklet.c:684 ../plugins/docklet/docklet.c:692 -#: ../plugins/win32/winprefs/winprefs.c:424 ../src/gtkprefs.c:823 +#: ../plugins/win32/winprefs/winprefs.c:462 ../src/gtkprefs.c:823 #: ../src/gtkprefs.c:1764 ../src/gtkprefs.c:1778 msgid "Never" msgstr "Niemals" @@ -307,7 +307,7 @@ #: ../plugins/docklet/docklet.c:686 ../plugins/docklet/docklet.c:694 #: ../plugins/timestamp_format.c:39 ../plugins/timestamp_format.c:48 -#: ../plugins/win32/winprefs/winprefs.c:425 ../src/gtkprefs.c:825 +#: ../plugins/win32/winprefs/winprefs.c:463 ../src/gtkprefs.c:825 msgid "Always" msgstr "Immer" @@ -617,7 +617,7 @@ #. Business #: ../plugins/gevolution/add_buddy_dialog.c:131 #: ../plugins/gevolution/assoc-buddy.c:119 ../src/gtkplugin.c:587 -#: ../src/gtkroomlist.c:604 ../src/protocols/jabber/jabber.c:755 +#: ../src/gtkroomlist.c:604 ../src/protocols/jabber/jabber.c:759 #: ../src/protocols/msn/msn.c:1532 ../src/protocols/msn/msn.c:1585 #: ../src/protocols/msn/msn.c:1606 msgid "Name" @@ -627,10 +627,10 @@ msgid "Instant Messaging" msgstr "Sofortnachrichten" -#: ../plugins/gevolution/add_buddy_dialog.c:442 ../src/gtkblist.c:4526 +#: ../plugins/gevolution/add_buddy_dialog.c:442 ../src/gtkblist.c:4532 #: ../src/protocols/silc/buddy.c:736 ../src/protocols/silc/buddy.c:1030 #: ../src/protocols/silc/buddy.c:1075 ../src/protocols/silc/buddy.c:1174 -#: ../src/protocols/yahoo/yahoo.c:2976 +#: ../src/protocols/yahoo/yahoo.c:2974 msgid "Add Buddy" msgstr "Buddy hinzufügen" @@ -644,14 +644,14 @@ #. "Search" #: ../plugins/gevolution/add_buddy_dialog.c:468 #: ../plugins/gevolution/assoc-buddy.c:353 -#: ../src/protocols/jabber/buddy.c:1460 ../src/protocols/oscar/oscar.c:6014 -#: ../src/protocols/sametime/sametime.c:5531 +#: ../src/protocols/jabber/buddy.c:1720 ../src/protocols/oscar/oscar.c:6020 +#: ../src/protocols/sametime/sametime.c:5529 msgid "Search" msgstr "Suchen" #: ../plugins/gevolution/add_buddy_dialog.c:549 -#: ../plugins/gevolution/new_person_dialog.c:307 ../src/gtkblist.c:4610 -#: ../src/gtkblist.c:4974 +#: ../plugins/gevolution/new_person_dialog.c:307 ../src/gtkblist.c:4616 +#: ../src/gtkblist.c:4980 msgid "Group:" msgstr "Gruppe:" @@ -687,13 +687,13 @@ msgstr "_Assoziiere den Buddy" #: ../plugins/gevolution/eds-utils.c:73 ../plugins/gevolution/eds-utils.c:86 -#: ../src/protocols/jabber/jabber.c:1122 +#: ../src/protocols/jabber/jabber.c:1125 msgid "None" msgstr "Kein" #: ../plugins/gevolution/gevo-util.c:64 ../plugins/gevolution/gevolution.c:96 #: ../src/blist.c:516 ../src/blist.c:1278 ../src/blist.c:1505 -#: ../src/gtkblist.c:4419 ../src/protocols/jabber/roster.c:65 +#: ../src/gtkblist.c:4425 ../src/protocols/jabber/roster.c:66 msgid "Buddies" msgstr "Buddys" @@ -730,8 +730,8 @@ "Wählen Sie alle Konten, zu denen Buddys automatisch hinzugefügt werden " "sollen." -#: ../plugins/gevolution/gevolution.c:450 ../plugins/idle.c:150 -#: ../plugins/idle.c:186 ../src/gtknotify.c:399 ../src/gtkpounce.c:1262 +#: ../plugins/gevolution/gevolution.c:450 ../plugins/idle.c:153 +#: ../plugins/idle.c:189 ../src/gtknotify.c:399 ../src/gtkpounce.c:1255 msgid "Account" msgstr "Konto" @@ -768,7 +768,7 @@ msgstr "Kontotyp:" #: ../plugins/gevolution/new_person_dialog.c:295 ../src/gtkaccount.c:784 -#: ../src/gtkblist.c:4572 +#: ../src/gtkblist.c:4578 msgid "Screen name:" msgstr "Benutzername:" @@ -870,50 +870,50 @@ msgid "Iconifies the buddy list and your conversations when you go away." msgstr "Minimiert die Buddy-Liste und die Gesprächsfenster, wenn Sie weggehen." -#: ../plugins/idle.c:155 ../plugins/idle.c:213 +#: ../plugins/idle.c:158 ../plugins/idle.c:216 msgid "Minutes" msgstr "Minuten" #. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. #. If that doesn't translate well into your language, drop the 's before translating. -#: ../plugins/idle.c:162 ../plugins/idle.c:195 ../plugins/idle.c:220 -#: ../plugins/idle.c:312 +#: ../plugins/idle.c:165 ../plugins/idle.c:198 ../plugins/idle.c:223 +#: ../plugins/idle.c:315 msgid "I'dle Mak'er" msgstr "Untätigkeitsmarker" -#: ../plugins/idle.c:163 ../plugins/idle.c:252 +#: ../plugins/idle.c:166 ../plugins/idle.c:255 msgid "Set Account Idle Time" msgstr "Setze Konto-Untätigkeitszeit" -#: ../plugins/idle.c:166 ../plugins/idle.c:224 +#: ../plugins/idle.c:169 ../plugins/idle.c:227 msgid "_Set" msgstr "_Setzen" -#: ../plugins/idle.c:167 ../plugins/idle.c:200 ../plugins/idle.c:225 +#: ../plugins/idle.c:170 ../plugins/idle.c:203 ../plugins/idle.c:228 msgid "_Cancel" msgstr "A_bbrechen" -#: ../plugins/idle.c:180 +#: ../plugins/idle.c:183 msgid "None of your accounts are idle." msgstr "Keine ihrer Konten sind untätig." -#: ../plugins/idle.c:196 ../plugins/idle.c:256 +#: ../plugins/idle.c:199 ../plugins/idle.c:259 msgid "Unset Account Idle Time" msgstr "Untätigkeitszeit zurücksetzen" -#: ../plugins/idle.c:199 +#: ../plugins/idle.c:202 msgid "_Unset" msgstr "Zurücksetze_n" -#: ../plugins/idle.c:221 ../plugins/idle.c:260 +#: ../plugins/idle.c:224 ../plugins/idle.c:263 msgid "Set Idle Time for All Accounts" msgstr "Untätigkeitszeit für alle Konten setzen" -#: ../plugins/idle.c:265 +#: ../plugins/idle.c:268 msgid "Unset Idle Time for All Idled Accounts" msgstr "Untätigkeitszeit für alle untätige Konten zurücksetzen" -#: ../plugins/idle.c:314 ../plugins/idle.c:315 +#: ../plugins/idle.c:317 ../plugins/idle.c:318 msgid "Allows you to hand-configure how long you've been idle" msgstr "" "Erlaubt Ihnen manuell zu konfigurieren, wie lange Sie untätig sein wollen" @@ -1661,7 +1661,7 @@ #. *< dependencies #. *< priority #. *< id -#: ../plugins/timestamp.c:254 +#: ../plugins/timestamp.c:256 msgid "Timestamp" msgstr "Zeitstempel" @@ -1669,7 +1669,7 @@ #. *< version #. * summary #. * description -#: ../plugins/timestamp.c:257 ../plugins/timestamp.c:259 +#: ../plugins/timestamp.c:259 ../plugins/timestamp.c:261 msgid "Adds iChat-style timestamps to conversations every N minutes." msgstr "Fügt iChat-ähnliche Zeitstempel alle N Minuten in die Gespräche ein." @@ -1798,57 +1798,57 @@ "\n" "* Hinweis: Dieses Plugin verlangt Win2000 oder höher." -#: ../plugins/win32/winprefs/winprefs.c:397 +#: ../plugins/win32/winprefs/winprefs.c:434 msgid "GTK+ Runtime Version" msgstr "GTK+ Runtime Version" #. Autostart -#: ../plugins/win32/winprefs/winprefs.c:405 +#: ../plugins/win32/winprefs/winprefs.c:442 msgid "Startup" msgstr "Start" -#: ../plugins/win32/winprefs/winprefs.c:406 +#: ../plugins/win32/winprefs/winprefs.c:443 msgid "_Start Gaim on Windows startup" msgstr "_Starte Gaim beim Windows-Start" #. Buddy List -#: ../plugins/win32/winprefs/winprefs.c:417 ../src/gtkblist.c:3663 +#: ../plugins/win32/winprefs/winprefs.c:455 ../src/gtkblist.c:3672 msgid "Buddy List" msgstr "Buddy-Liste" -#: ../plugins/win32/winprefs/winprefs.c:418 +#: ../plugins/win32/winprefs/winprefs.c:456 msgid "_Dockable Buddy List" msgstr "An_dockbare Buddy-Liste" #. Blist On Top -#: ../plugins/win32/winprefs/winprefs.c:422 +#: ../plugins/win32/winprefs/winprefs.c:460 msgid "_Keep Buddy List window on top:" msgstr "_Buddy-Listen-Fenster bleibt im Vordergrund:" #. XXX: Did this ever work? -#: ../plugins/win32/winprefs/winprefs.c:427 +#: ../plugins/win32/winprefs/winprefs.c:465 msgid "Only when docked" msgstr "Nur wenn angedockt" #. Conversations -#: ../plugins/win32/winprefs/winprefs.c:431 ../src/gtkprefs.c:819 +#: ../plugins/win32/winprefs/winprefs.c:469 ../src/gtkprefs.c:819 #: ../src/gtkprefs.c:1879 msgid "Conversations" msgstr "Unterhaltungen" -#: ../plugins/win32/winprefs/winprefs.c:432 +#: ../plugins/win32/winprefs/winprefs.c:470 msgid "_Flash window when messages are received" msgstr "_Fenster blinkt, wenn Nachrichten empfangen werden" -#: ../plugins/win32/winprefs/winprefs.c:456 +#: ../plugins/win32/winprefs/winprefs.c:494 msgid "WinGaim Options" msgstr "WinGaim Optionen" -#: ../plugins/win32/winprefs/winprefs.c:458 +#: ../plugins/win32/winprefs/winprefs.c:496 msgid "Options specific to Windows Gaim." msgstr "Windows-Gaim-spezifische Optionen." -#: ../plugins/win32/winprefs/winprefs.c:459 +#: ../plugins/win32/winprefs/winprefs.c:497 msgid "" "Provides options specific to Windows Gaim, such as buddy list docking and " "conversation flashing." @@ -1860,139 +1860,138 @@ msgid "accounts" msgstr "Konten" -#: ../src/account.c:923 +#: ../src/account.c:918 msgid "Password is required to sign on." msgstr "Passwort wird für die Anmeldung benötigt." -#: ../src/account.c:948 +#: ../src/account.c:943 #, c-format msgid "Enter password for %s (%s)" msgstr "Geben Sie das Passwort für %s (%s) ein" -#: ../src/account.c:955 +#: ../src/account.c:950 msgid "Enter Password" msgstr "Geben Sie ein Passwort ein" -#: ../src/account.c:960 +#: ../src/account.c:955 msgid "Save password" msgstr "Passwort speichern" #. * #. * A wrapper for gaim_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../src/account.c:968 ../src/account.c:1139 ../src/gtkblist.c:3546 -#: ../src/gtkdialogs.c:602 ../src/gtkdialogs.c:739 ../src/gtkdialogs.c:803 +#: ../src/account.c:963 ../src/account.c:1134 ../src/gtkblist.c:3556 +#: ../src/gtkdialogs.c:613 ../src/gtkdialogs.c:750 ../src/gtkdialogs.c:824 #: ../src/gtkrequest.c:269 ../src/protocols/gg/gg.c:497 #: ../src/protocols/gg/gg.c:655 ../src/protocols/gg/gg.c:791 -#: ../src/protocols/jabber/jabber.c:1319 ../src/protocols/jabber/xdata.c:337 +#: ../src/protocols/jabber/jabber.c:1322 ../src/protocols/jabber/xdata.c:337 #: ../src/protocols/msn/msn.c:250 ../src/protocols/msn/msn.c:265 #: ../src/protocols/msn/msn.c:280 ../src/protocols/msn/msn.c:295 #: ../src/protocols/oscar/oscar.c:1408 ../src/protocols/oscar/oscar.c:2167 -#: ../src/protocols/oscar/oscar.c:2260 ../src/protocols/oscar/oscar.c:5684 -#: ../src/protocols/oscar/oscar.c:5864 ../src/protocols/oscar/oscar.c:5889 -#: ../src/protocols/oscar/oscar.c:5945 ../src/protocols/silc/buddy.c:466 +#: ../src/protocols/oscar/oscar.c:2260 ../src/protocols/oscar/oscar.c:5690 +#: ../src/protocols/oscar/oscar.c:5870 ../src/protocols/oscar/oscar.c:5895 +#: ../src/protocols/oscar/oscar.c:5951 ../src/protocols/silc/buddy.c:466 #: ../src/protocols/silc/buddy.c:1182 ../src/protocols/silc/chat.c:424 #: ../src/protocols/silc/chat.c:462 ../src/protocols/silc/chat.c:725 #: ../src/protocols/silc/ops.c:1297 ../src/protocols/silc/ops.c:1910 -#: ../src/protocols/silc/silc.c:753 ../src/protocols/yahoo/yahoo.c:3061 -#: ../src/protocols/yahoo/yahoo.c:3070 ../src/request.h:1344 +#: ../src/protocols/silc/silc.c:753 ../src/protocols/yahoo/yahoo.c:3059 +#: ../src/protocols/yahoo/yahoo.c:3068 ../src/request.h:1344 msgid "OK" msgstr "OK" -#: ../src/account.c:969 ../src/account.c:1140 ../src/account.c:1177 -#: ../src/gtkaccount.c:2182 ../src/gtkaccount.c:2649 ../src/gtkblist.c:5015 -#: ../src/gtkdialogs.c:603 ../src/gtkdialogs.c:740 ../src/gtkdialogs.c:804 -#: ../src/gtkdialogs.c:823 ../src/gtkdialogs.c:845 ../src/gtkdialogs.c:865 -#: ../src/gtkdialogs.c:909 ../src/gtkdialogs.c:964 ../src/gtkdialogs.c:1001 -#: ../src/gtkdialogs.c:1026 ../src/gtkimhtmltoolbar.c:419 -#: ../src/gtkplugin.c:296 ../src/gtkpounce.c:1095 ../src/gtkprivacy.c:568 +#: ../src/account.c:964 ../src/account.c:1135 ../src/account.c:1172 +#: ../src/gtkaccount.c:2182 ../src/gtkaccount.c:2649 ../src/gtkblist.c:5021 +#: ../src/gtkdialogs.c:614 ../src/gtkdialogs.c:751 ../src/gtkdialogs.c:825 +#: ../src/gtkdialogs.c:844 ../src/gtkdialogs.c:866 ../src/gtkdialogs.c:886 +#: ../src/gtkdialogs.c:930 ../src/gtkdialogs.c:985 ../src/gtkdialogs.c:1022 +#: ../src/gtkdialogs.c:1047 ../src/gtkimhtmltoolbar.c:419 +#: ../src/gtkplugin.c:296 ../src/gtkpounce.c:1088 ../src/gtkprivacy.c:568 #: ../src/gtkprivacy.c:581 ../src/gtkprivacy.c:606 ../src/gtkprivacy.c:617 #: ../src/gtkrequest.c:270 ../src/gtksavedstatuses.c:296 #: ../src/protocols/gg/gg.c:498 ../src/protocols/gg/gg.c:656 #: ../src/protocols/gg/gg.c:792 ../src/protocols/gg/gg.c:871 -#: ../src/protocols/jabber/buddy.c:576 ../src/protocols/jabber/buddy.c:1461 -#: ../src/protocols/jabber/buddy.c:1495 ../src/protocols/jabber/chat.c:780 -#: ../src/protocols/jabber/jabber.c:824 ../src/protocols/jabber/jabber.c:1320 +#: ../src/protocols/jabber/buddy.c:594 ../src/protocols/jabber/buddy.c:1721 +#: ../src/protocols/jabber/buddy.c:1755 ../src/protocols/jabber/chat.c:778 +#: ../src/protocols/jabber/jabber.c:828 ../src/protocols/jabber/jabber.c:1323 #: ../src/protocols/jabber/xdata.c:338 ../src/protocols/msn/msn.c:251 #: ../src/protocols/msn/msn.c:266 ../src/protocols/msn/msn.c:281 #: ../src/protocols/msn/msn.c:296 ../src/protocols/msn/msn.c:313 #: ../src/protocols/oscar/oscar.c:1409 ../src/protocols/oscar/oscar.c:2168 #: ../src/protocols/oscar/oscar.c:2209 ../src/protocols/oscar/oscar.c:2261 -#: ../src/protocols/oscar/oscar.c:5685 ../src/protocols/oscar/oscar.c:5737 -#: ../src/protocols/oscar/oscar.c:5865 ../src/protocols/oscar/oscar.c:5890 -#: ../src/protocols/oscar/oscar.c:5946 ../src/protocols/oscar/oscar.c:6015 -#: ../src/protocols/oscar/peer.c:942 ../src/protocols/sametime/sametime.c:3375 -#: ../src/protocols/sametime/sametime.c:3460 -#: ../src/protocols/sametime/sametime.c:3630 -#: ../src/protocols/sametime/sametime.c:5319 -#: ../src/protocols/sametime/sametime.c:5408 -#: ../src/protocols/sametime/sametime.c:5532 ../src/protocols/silc/buddy.c:467 +#: ../src/protocols/oscar/oscar.c:5691 ../src/protocols/oscar/oscar.c:5743 +#: ../src/protocols/oscar/oscar.c:5871 ../src/protocols/oscar/oscar.c:5896 +#: ../src/protocols/oscar/oscar.c:5952 ../src/protocols/oscar/oscar.c:6021 +#: ../src/protocols/oscar/peer.c:942 ../src/protocols/sametime/sametime.c:3368 +#: ../src/protocols/sametime/sametime.c:3453 +#: ../src/protocols/sametime/sametime.c:3623 +#: ../src/protocols/sametime/sametime.c:5317 +#: ../src/protocols/sametime/sametime.c:5406 +#: ../src/protocols/sametime/sametime.c:5530 ../src/protocols/silc/buddy.c:467 #: ../src/protocols/silc/buddy.c:1078 ../src/protocols/silc/buddy.c:1183 #: ../src/protocols/silc/chat.c:597 ../src/protocols/silc/chat.c:726 #: ../src/protocols/silc/ops.c:1911 ../src/protocols/silc/silc.c:754 -#: ../src/protocols/silc/silc.c:959 ../src/protocols/yahoo/yahoo.c:3062 -#: ../src/protocols/yahoo/yahoo.c:3071 ../src/request.h:1344 +#: ../src/protocols/silc/silc.c:959 ../src/protocols/yahoo/yahoo.c:3060 +#: ../src/protocols/yahoo/yahoo.c:3069 ../src/request.h:1344 #: ../src/request.h:1354 msgid "Cancel" msgstr "Abbrechen" -#: ../src/account.c:994 ../src/connection.c:96 +#: ../src/account.c:989 ../src/connection.c:96 #, c-format msgid "Missing protocol plugin for %s" msgstr "Fehlendes Protokoll-Plugin für %s" -#: ../src/account.c:996 ../src/connection.c:99 ../src/gtkblist.c:3538 -#: ../src/gtkblist.c:3544 +#: ../src/account.c:991 ../src/connection.c:99 ../src/gtkblist.c:3554 msgid "Connection Error" msgstr "Verbindungsfehler" -#: ../src/account.c:1076 ../src/protocols/gg/gg.c:696 -#: ../src/protocols/jabber/jabber.c:1272 +#: ../src/account.c:1071 ../src/protocols/gg/gg.c:696 +#: ../src/protocols/jabber/jabber.c:1275 msgid "New passwords do not match." msgstr "Die neuen Passwörter stimmen nicht überein." -#: ../src/account.c:1085 +#: ../src/account.c:1080 msgid "Fill out all fields completely." msgstr "Bitte füllen Sie alle Felder aus." -#: ../src/account.c:1108 +#: ../src/account.c:1103 msgid "Original password" msgstr "Aktuelles Passwort" -#: ../src/account.c:1115 +#: ../src/account.c:1110 msgid "New password" msgstr "Neues Passwort" -#: ../src/account.c:1122 +#: ../src/account.c:1117 msgid "New password (again)" msgstr "Neues Passwort (nochmal)" -#: ../src/account.c:1128 +#: ../src/account.c:1123 #, c-format msgid "Change password for %s" msgstr "Ändern des Passworts für %s" -#: ../src/account.c:1136 +#: ../src/account.c:1131 msgid "Please enter your current password and your new password." msgstr "Bitte geben Sie Ihr aktuelles und Ihr neues Passwort ein." -#: ../src/account.c:1169 +#: ../src/account.c:1164 #, c-format msgid "Change user information for %s" msgstr "Ändere die Benutzerinformation für %s" -#: ../src/account.c:1172 ../src/protocols/toc/toc.c:1684 +#: ../src/account.c:1167 ../src/protocols/toc/toc.c:1684 msgid "Set User Info" msgstr "Benutzer-Info setzen" -#: ../src/account.c:1176 ../src/gtkdebug.c:684 ../src/gtkrequest.c:276 -#: ../src/protocols/jabber/buddy.c:575 +#: ../src/account.c:1171 ../src/gtkdebug.c:684 ../src/gtkrequest.c:276 +#: ../src/protocols/jabber/buddy.c:593 msgid "Save" msgstr "Speichern" -#: ../src/account.c:1679 ../src/gtkft.c:159 ../src/protocols/gg/gg.c:1002 -#: ../src/protocols/jabber/buddy.c:633 ../src/protocols/jabber/buddy.c:1098 -#: ../src/protocols/jabber/buddy.c:1115 ../src/protocols/novell/novell.c:2860 +#: ../src/account.c:1681 ../src/gtkft.c:159 ../src/protocols/gg/gg.c:1002 +#: ../src/protocols/jabber/buddy.c:636 ../src/protocols/jabber/buddy.c:1357 +#: ../src/protocols/jabber/buddy.c:1374 ../src/protocols/novell/novell.c:2858 msgid "Unknown" msgstr "Unbekannt" @@ -2040,49 +2039,49 @@ msgid "+++ %s signed off" msgstr "+++ %s hat sich abgemeldet" -#: ../src/conversation.c:161 +#: ../src/conversation.c:168 msgid "Unable to send message: The message is too large." msgstr "Nachricht kann nicht gesendet werden: Sie ist zu groß." -#: ../src/conversation.c:164 ../src/conversation.c:177 +#: ../src/conversation.c:171 ../src/conversation.c:184 #, c-format msgid "Unable to send message to %s." msgstr "Kann die Nachricht an %s nicht senden." -#: ../src/conversation.c:165 +#: ../src/conversation.c:172 msgid "The message is too large." msgstr "Die Nachricht ist zu lang." -#: ../src/conversation.c:174 +#: ../src/conversation.c:181 msgid "Unable to send message." msgstr "Nachricht kann nicht gesendet werden." -#: ../src/conversation.c:1515 +#: ../src/conversation.c:1510 #, c-format msgid "%s entered the room." msgstr "%s hat den Raum betreten." -#: ../src/conversation.c:1518 +#: ../src/conversation.c:1513 #, c-format msgid "%s [<I>%s</I>] entered the room." msgstr "%s [<I>%s</I>] hat den Raum betreten." -#: ../src/conversation.c:1625 +#: ../src/conversation.c:1620 #, c-format msgid "You are now known as %s" msgstr "Sie heißen jetzt %s" -#: ../src/conversation.c:1645 +#: ../src/conversation.c:1640 #, c-format msgid "%s is now known as %s" msgstr "%s heißt jetzt %s" -#: ../src/conversation.c:1718 +#: ../src/conversation.c:1713 #, c-format msgid "%s left the room." msgstr "%s hat den Raum verlassen." -#: ../src/conversation.c:1721 +#: ../src/conversation.c:1716 #, c-format msgid "%s left the room (%s)." msgstr "%s hat den Raum verlassen (%s)." @@ -2091,7 +2090,7 @@ msgid "No name" msgstr "Kein Name" -#: ../src/ft.c:189 ../src/protocols/msn/msn.c:412 +#: ../src/ft.c:189 ../src/protocols/msn/msn.c:410 #, c-format msgid "" "Error reading %s: \n" @@ -2158,60 +2157,60 @@ "Remote-Computer: %s\n" "Remote-Port: %d" -#: ../src/ft.c:391 +#: ../src/ft.c:392 #, c-format msgid "%s is offering to send file %s" msgstr "%s bietet an, die Datei %s zu senden" -#: ../src/ft.c:443 +#: ../src/ft.c:444 #, c-format msgid "%s is not a valid filename.\n" msgstr "%s ist kein gültiger Dateiname.\n" -#: ../src/ft.c:464 +#: ../src/ft.c:465 #, c-format msgid "Offering to send %s to %s" msgstr "Angebot zum Senden von %s an %s" -#: ../src/ft.c:476 +#: ../src/ft.c:477 #, c-format msgid "Starting transfer of %s from %s" msgstr "Starte die Dateiübertragung von %s von %s" -#: ../src/ft.c:630 +#: ../src/ft.c:631 #, c-format msgid "Transfer of file %s complete" msgstr "Übertragung der Datei %s ist komplett" -#: ../src/ft.c:633 +#: ../src/ft.c:634 msgid "File transfer complete" msgstr "Dateiübertragung ist komplett" -#: ../src/ft.c:1028 +#: ../src/ft.c:1031 #, c-format msgid "You canceled the transfer of %s" msgstr "Sie haben die Dateiübertragung von %s abgebrochen" -#: ../src/ft.c:1033 +#: ../src/ft.c:1036 msgid "File transfer cancelled" msgstr "Dateiübertragung wurde abgebrochen" -#: ../src/ft.c:1091 +#: ../src/ft.c:1094 #, c-format msgid "%s canceled the transfer of %s" msgstr "%s hat die Übertragung von %s abgebrochen" -#: ../src/ft.c:1096 +#: ../src/ft.c:1099 #, c-format msgid "%s canceled the file transfer" msgstr "%s hat die Datenübertragung abgebrochen" -#: ../src/ft.c:1153 +#: ../src/ft.c:1156 #, c-format msgid "File transfer to %s failed." msgstr "Dateiübertragung an %s wurde abgebrochen." -#: ../src/ft.c:1155 +#: ../src/ft.c:1158 #, c-format msgid "File transfer from %s failed." msgstr "Dateiübertragung von %s wurde abgebrochen." @@ -2240,7 +2239,7 @@ msgid "Password:" msgstr "Passwort:" -#: ../src/gtkaccount.c:863 ../src/gtkblist.c:4593 ../src/gtkblist.c:4959 +#: ../src/gtkaccount.c:863 ../src/gtkblist.c:4599 ../src/gtkblist.c:4965 msgid "Alias:" msgstr "Alias:" @@ -2333,7 +2332,7 @@ msgid "Add Account" msgstr "Konto hinzufügen" -#: ../src/gtkaccount.c:1749 ../src/gtkblist.c:3547 +#: ../src/gtkaccount.c:1749 ../src/gtkblist.c:3557 msgid "Modify Account" msgstr "Konto bearbeiten" @@ -2346,7 +2345,7 @@ msgstr "_Erweitert" #. Register button -#: ../src/gtkaccount.c:1797 ../src/protocols/jabber/jabber.c:823 +#: ../src/gtkaccount.c:1797 ../src/protocols/jabber/jabber.c:827 msgid "Register" msgstr "Anmelden" @@ -2355,12 +2354,12 @@ msgid "Are you sure you want to delete %s?" msgstr "Wollen Sie %s wirklich löschen?" -#: ../src/gtkaccount.c:2181 ../src/gtkpounce.c:1094 ../src/gtkrequest.c:273 +#: ../src/gtkaccount.c:2181 ../src/gtkpounce.c:1087 ../src/gtkrequest.c:273 #: ../src/gtksavedstatuses.c:295 msgid "Delete" msgstr "Löschen" -#: ../src/gtkaccount.c:2239 ../src/gtksavedstatuses.c:889 +#: ../src/gtkaccount.c:2239 ../src/gtksavedstatuses.c:893 #: ../src/protocols/oscar/oscar.c:2823 msgid "Screen Name" msgstr "Benutzername" @@ -2378,18 +2377,18 @@ msgid "Add buddy to your list?" msgstr "Benutzer zu Ihrer Buddy-Liste hinzufügen?" -#: ../src/gtkaccount.c:2648 ../src/gtkblist.c:5014 ../src/gtkconv.c:1623 +#: ../src/gtkaccount.c:2648 ../src/gtkblist.c:5020 ../src/gtkconv.c:1621 #: ../src/gtkrequest.c:274 ../src/protocols/gg/gg.c:870 #: ../src/protocols/oscar/oscar.c:2453 -#: ../src/protocols/sametime/sametime.c:5407 ../src/protocols/silc/chat.c:596 +#: ../src/protocols/sametime/sametime.c:5405 ../src/protocols/silc/chat.c:596 msgid "Add" msgstr "Hinzufügen" -#: ../src/gtkblist.c:664 +#: ../src/gtkblist.c:673 msgid "Join a Chat" msgstr "Chat betreten" -#: ../src/gtkblist.c:685 +#: ../src/gtkblist.c:694 msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" @@ -2397,87 +2396,87 @@ "Bitte geben Sie geeignete Informationen über den Chat ein, den Sie betreten " "wollen.\n" -#: ../src/gtkblist.c:696 ../src/gtkpounce.c:527 ../src/gtkroomlist.c:377 +#: ../src/gtkblist.c:705 ../src/gtkpounce.c:523 ../src/gtkroomlist.c:377 msgid "_Account:" msgstr "_Konto:" -#: ../src/gtkblist.c:940 +#: ../src/gtkblist.c:949 msgid "Get _Info" msgstr "_Info abrufen" -#: ../src/gtkblist.c:943 ../src/gtkstock.c:141 +#: ../src/gtkblist.c:952 ../src/gtkstock.c:141 msgid "I_M" msgstr "I_M" -#: ../src/gtkblist.c:949 +#: ../src/gtkblist.c:958 msgid "_Send File" msgstr "Datei ver_senden" -#: ../src/gtkblist.c:956 +#: ../src/gtkblist.c:965 msgid "Add Buddy _Pounce" msgstr "B_uddy-Alarm hinzufügen" -#: ../src/gtkblist.c:960 ../src/gtkblist.c:964 ../src/gtkblist.c:1063 -#: ../src/gtkblist.c:1086 +#: ../src/gtkblist.c:969 ../src/gtkblist.c:973 ../src/gtkblist.c:1072 +#: ../src/gtkblist.c:1095 msgid "View _Log" msgstr "Mi_tschnitt anzeigen" -#: ../src/gtkblist.c:975 +#: ../src/gtkblist.c:984 msgid "Alias..." msgstr "Alias..." -#: ../src/gtkblist.c:978 ../src/gtkconv.c:1620 ../src/gtkrequest.c:275 +#: ../src/gtkblist.c:987 ../src/gtkconv.c:1618 ../src/gtkrequest.c:275 msgid "Remove" msgstr "Entfernen" -#: ../src/gtkblist.c:984 ../src/gtkblist.c:1071 ../src/gtkblist.c:1092 +#: ../src/gtkblist.c:993 ../src/gtkblist.c:1080 ../src/gtkblist.c:1101 msgid "_Alias..." msgstr "_Alias..." -#: ../src/gtkblist.c:986 ../src/gtkblist.c:1073 ../src/gtkblist.c:1094 +#: ../src/gtkblist.c:995 ../src/gtkblist.c:1082 ../src/gtkblist.c:1103 msgid "_Remove" msgstr "_Entfernen" -#: ../src/gtkblist.c:1034 +#: ../src/gtkblist.c:1043 msgid "Add a _Buddy" msgstr "Buddy _hinzufügen" -#: ../src/gtkblist.c:1036 +#: ../src/gtkblist.c:1045 msgid "Add a C_hat" msgstr "C_hat hinzufügen" -#: ../src/gtkblist.c:1039 +#: ../src/gtkblist.c:1048 msgid "_Delete Group" msgstr "Gruppe _löschen" -#: ../src/gtkblist.c:1041 +#: ../src/gtkblist.c:1050 msgid "_Rename" msgstr "_Umbenennen" #. join button -#: ../src/gtkblist.c:1059 ../src/gtkroomlist.c:285 ../src/gtkroomlist.c:441 +#: ../src/gtkblist.c:1068 ../src/gtkroomlist.c:285 ../src/gtkroomlist.c:441 #: ../src/gtkstock.c:139 msgid "_Join" msgstr "_Betreten" -#: ../src/gtkblist.c:1061 +#: ../src/gtkblist.c:1070 msgid "Auto-Join" msgstr "Automatisch beitreten" -#: ../src/gtkblist.c:1099 ../src/gtkblist.c:1122 +#: ../src/gtkblist.c:1108 ../src/gtkblist.c:1131 msgid "_Collapse" msgstr "_Zusammenklappen" -#: ../src/gtkblist.c:1127 +#: ../src/gtkblist.c:1136 msgid "_Expand" msgstr "A_usklappen" -#: ../src/gtkblist.c:1373 ../src/gtkblist.c:1385 ../src/gtkblist.c:3808 -#: ../src/gtkblist.c:3818 +#: ../src/gtkblist.c:1382 ../src/gtkblist.c:1394 ../src/gtkblist.c:3817 +#: ../src/gtkblist.c:3827 msgid "/Tools/Mute Sounds" msgstr "/Werkzeuge/Stummschalten" -#: ../src/gtkblist.c:1845 ../src/gtkconv.c:4195 ../src/gtkpounce.c:426 +#: ../src/gtkblist.c:1859 ../src/gtkconv.c:4235 ../src/gtkpounce.c:422 msgid "" "You are not currently signed on with an account that can add that buddy." msgstr "" @@ -2485,126 +2484,126 @@ "kann, um diesen Buddy hinzuzufügen." #. Buddies menu -#: ../src/gtkblist.c:2419 +#: ../src/gtkblist.c:2433 msgid "/_Buddies" msgstr "/_Buddys" -#: ../src/gtkblist.c:2420 +#: ../src/gtkblist.c:2434 msgid "/Buddies/New Instant _Message..." msgstr "/Buddys/_Neue Sofortnachricht..." -#: ../src/gtkblist.c:2421 +#: ../src/gtkblist.c:2435 msgid "/Buddies/Join a _Chat..." msgstr "/Buddys/Einen _Chat betreten..." -#: ../src/gtkblist.c:2422 +#: ../src/gtkblist.c:2436 msgid "/Buddies/Get User _Info..." msgstr "/Buddys/B_enutzer-Info abrufen..." -#: ../src/gtkblist.c:2423 +#: ../src/gtkblist.c:2437 msgid "/Buddies/View User _Log..." msgstr "/Buddys/Benutzer-_Mitschnitt ansehen..." -#: ../src/gtkblist.c:2425 +#: ../src/gtkblist.c:2439 msgid "/Buddies/Show _Offline Buddies" msgstr "/Buddys/Zeige _offline Buddys" -#: ../src/gtkblist.c:2426 +#: ../src/gtkblist.c:2440 msgid "/Buddies/Show _Empty Groups" msgstr "/Buddys/Zeige _leere Gruppen" -#: ../src/gtkblist.c:2427 +#: ../src/gtkblist.c:2441 msgid "/Buddies/Show Buddy _Details" msgstr "/Buddys/Zeige Buddy-_Details" -#: ../src/gtkblist.c:2428 +#: ../src/gtkblist.c:2442 msgid "/Buddies/Show Idle _Times" msgstr "/Buddys/Zeige Untätigkeitszei_ten" -#: ../src/gtkblist.c:2429 +#: ../src/gtkblist.c:2443 msgid "/Buddies/_Sort Buddies" msgstr "/Buddys/Buddys _sortieren" -#: ../src/gtkblist.c:2431 +#: ../src/gtkblist.c:2445 msgid "/Buddies/_Add Buddy..." msgstr "/Buddys/B_uddy hinzufügen..." -#: ../src/gtkblist.c:2432 +#: ../src/gtkblist.c:2446 msgid "/Buddies/Add C_hat..." msgstr "/Buddys/C_hat hinzufügen..." -#: ../src/gtkblist.c:2433 +#: ../src/gtkblist.c:2447 msgid "/Buddies/Add _Group..." msgstr "/Buddys/_Gruppe hinzufügen..." -#: ../src/gtkblist.c:2435 +#: ../src/gtkblist.c:2449 msgid "/Buddies/_Quit" msgstr "/Buddys/_Beenden" #. Accounts menu -#: ../src/gtkblist.c:2438 +#: ../src/gtkblist.c:2452 msgid "/_Accounts" msgstr "/_Konten" -#: ../src/gtkblist.c:2439 ../src/gtkblist.c:5591 +#: ../src/gtkblist.c:2453 ../src/gtkblist.c:5597 msgid "/Accounts/Add\\/Edit" msgstr "/Konten/Hinzufügen\\/Ändern" #. Tools -#: ../src/gtkblist.c:2442 +#: ../src/gtkblist.c:2456 msgid "/_Tools" msgstr "/_Werkzeuge" -#: ../src/gtkblist.c:2443 +#: ../src/gtkblist.c:2457 msgid "/Tools/Buddy _Pounces" msgstr "/Werkzeuge/Buddy-_Alarm" -#: ../src/gtkblist.c:2444 +#: ../src/gtkblist.c:2458 msgid "/Tools/Plu_gins" msgstr "/Werkzeuge/Plu_gins" -#: ../src/gtkblist.c:2445 +#: ../src/gtkblist.c:2459 msgid "/Tools/Pr_eferences" msgstr "/Werkzeuge/_Einstellungen" -#: ../src/gtkblist.c:2446 +#: ../src/gtkblist.c:2460 msgid "/Tools/Pr_ivacy" msgstr "/Werkzeuge/Pri_vatsphäre" -#: ../src/gtkblist.c:2448 +#: ../src/gtkblist.c:2462 msgid "/Tools/_File Transfers" msgstr "/Werkzeuge/_Dateiübertragungen" -#: ../src/gtkblist.c:2449 +#: ../src/gtkblist.c:2463 msgid "/Tools/R_oom List" msgstr "/Werkzeuge/_Raumliste" -#: ../src/gtkblist.c:2450 +#: ../src/gtkblist.c:2464 msgid "/Tools/System _Log" msgstr "/Werkzeuge/_System-Mitschnitt" -#: ../src/gtkblist.c:2452 +#: ../src/gtkblist.c:2466 msgid "/Tools/Mute _Sounds" msgstr "/Werkzeuge/_Stummschalten" #. Help -#: ../src/gtkblist.c:2455 +#: ../src/gtkblist.c:2469 msgid "/_Help" msgstr "/_Hilfe" -#: ../src/gtkblist.c:2456 +#: ../src/gtkblist.c:2470 msgid "/Help/Online _Help" msgstr "/Hilfe/Online-_Hilfe" -#: ../src/gtkblist.c:2457 +#: ../src/gtkblist.c:2471 msgid "/Help/_Debug Window" msgstr "/Hilfe/_Debug-Fenster" -#: ../src/gtkblist.c:2458 +#: ../src/gtkblist.c:2472 msgid "/Help/_About" msgstr "/Hilfe/I_nfo" -#: ../src/gtkblist.c:2490 ../src/gtkblist.c:2559 +#: ../src/gtkblist.c:2504 ../src/gtkblist.c:2573 #, c-format msgid "" "\n" @@ -2613,7 +2612,7 @@ "\n" "<b>Konto:</b> %s" -#: ../src/gtkblist.c:2571 +#: ../src/gtkblist.c:2585 #, c-format msgid "" "\n" @@ -2622,7 +2621,7 @@ "\n" "<b>Buddy-Alias:</b> %s" -#: ../src/gtkblist.c:2583 +#: ../src/gtkblist.c:2597 #, c-format msgid "" "\n" @@ -2631,7 +2630,7 @@ "\n" "<b>Spitzname:</b> %s" -#: ../src/gtkblist.c:2592 +#: ../src/gtkblist.c:2606 #, c-format msgid "" "\n" @@ -2640,7 +2639,7 @@ "\n" "<b>Angemeldet:</b> %s" -#: ../src/gtkblist.c:2603 +#: ../src/gtkblist.c:2617 #, c-format msgid "" "\n" @@ -2649,7 +2648,7 @@ "\n" "<b>Untätig:</b> %s" -#: ../src/gtkblist.c:2638 +#: ../src/gtkblist.c:2652 #, c-format msgid "" "\n" @@ -2658,7 +2657,7 @@ "\n" "<b>Zuletzt gesehen:</b> vor %s" -#: ../src/gtkblist.c:2647 +#: ../src/gtkblist.c:2661 msgid "" "\n" "<b>Status:</b> Offline" @@ -2666,7 +2665,7 @@ "\n" "<b>Status:</b> Offline" -#: ../src/gtkblist.c:2658 +#: ../src/gtkblist.c:2672 msgid "" "\n" "<b>Description:</b> Spooky" @@ -2674,7 +2673,7 @@ "\n" "<b>Beschreibung:</b> Spooky" -#: ../src/gtkblist.c:2660 +#: ../src/gtkblist.c:2674 msgid "" "\n" "<b>Status:</b> Awesome" @@ -2682,7 +2681,7 @@ "\n" "<b>Status:</b> großartig" -#: ../src/gtkblist.c:2662 +#: ../src/gtkblist.c:2676 msgid "" "\n" "<b>Status:</b> Rockin'" @@ -2690,119 +2689,120 @@ "\n" "<b>Status:</b> Rockin'" -#: ../src/gtkblist.c:2951 +#: ../src/gtkblist.c:2967 #, c-format msgid "Idle %dh %02dm" msgstr "Untätig %dh %02dm" -#: ../src/gtkblist.c:2953 +#: ../src/gtkblist.c:2969 #, c-format msgid "Idle %dm" msgstr "Untätig %dm" #. Idle stuff -#: ../src/gtkblist.c:2956 ../src/gtkprefs.c:1760 -#: ../src/protocols/bonjour/bonjour.c:333 ../src/protocols/msn/msn.c:552 -#: ../src/protocols/msn/state.c:32 ../src/protocols/novell/novell.c:2854 -#: ../src/protocols/oscar/oscar.c:2844 ../src/protocols/yahoo/yahoo.c:2729 +#: ../src/gtkblist.c:2972 ../src/gtkprefs.c:1760 +#: ../src/protocols/bonjour/bonjour.c:333 ../src/protocols/jabber/buddy.c:641 +#: ../src/protocols/jabber/buddy.c:672 ../src/protocols/msn/msn.c:550 +#: ../src/protocols/msn/state.c:32 ../src/protocols/novell/novell.c:2852 +#: ../src/protocols/oscar/oscar.c:2844 ../src/protocols/yahoo/yahoo.c:2727 #: ../src/protocols/yahoo/yahoo_profile.c:691 msgid "Idle" msgstr "Untätig" -#: ../src/gtkblist.c:3088 +#: ../src/gtkblist.c:3104 msgid "/Buddies/New Instant Message..." msgstr "/Buddys/_Neue Sofortnachricht..." -#: ../src/gtkblist.c:3089 ../src/gtkblist.c:3122 +#: ../src/gtkblist.c:3105 ../src/gtkblist.c:3138 msgid "/Buddies/Join a Chat..." msgstr "/Buddys/Chat betreten..." -#: ../src/gtkblist.c:3090 +#: ../src/gtkblist.c:3106 msgid "/Buddies/Get User Info..." msgstr "/Buddys/B_enutzer-Info abrufen..." -#: ../src/gtkblist.c:3091 +#: ../src/gtkblist.c:3107 msgid "/Buddies/Add Buddy..." msgstr "/Buddys/B_uddy hinzufügen..." -#: ../src/gtkblist.c:3092 ../src/gtkblist.c:3125 +#: ../src/gtkblist.c:3108 ../src/gtkblist.c:3141 msgid "/Buddies/Add Chat..." msgstr "/Buddys/C_hat hinzufügen..." -#: ../src/gtkblist.c:3093 +#: ../src/gtkblist.c:3109 msgid "/Buddies/Add Group..." msgstr "/Buddys/Gruppe hinzufügen..." -#: ../src/gtkblist.c:3128 +#: ../src/gtkblist.c:3144 msgid "/Tools/Buddy Pounces" msgstr "/Werkzeuge/Buddy-Alarm" -#: ../src/gtkblist.c:3131 +#: ../src/gtkblist.c:3147 msgid "/Tools/Privacy" msgstr "/Werkzeuge/Privatsphäre" -#: ../src/gtkblist.c:3134 +#: ../src/gtkblist.c:3150 msgid "/Tools/Room List" msgstr "/Werkzeuge/Raumliste" -#: ../src/gtkblist.c:3328 +#: ../src/gtkblist.c:3344 msgid "Manually" msgstr "Manuell" -#: ../src/gtkblist.c:3330 +#: ../src/gtkblist.c:3346 msgid "Alphabetically" msgstr "Alphabetisch" -#: ../src/gtkblist.c:3331 +#: ../src/gtkblist.c:3347 msgid "By status" msgstr "Nach Status" -#: ../src/gtkblist.c:3332 +#: ../src/gtkblist.c:3348 msgid "By log size" msgstr "Nach Größe der Logs" -#: ../src/gtkblist.c:3532 ../src/gtkconn.c:196 +#: ../src/gtkblist.c:3549 ../src/gtkconn.c:184 #, c-format msgid "%s disconnected" msgstr "%s abgemeldet" -#: ../src/gtkblist.c:3548 ../src/protocols/sametime/sametime.c:3629 +#: ../src/gtkblist.c:3558 ../src/protocols/sametime/sametime.c:3622 msgid "Connect" msgstr "Verbinden" -#: ../src/gtkblist.c:3548 +#: ../src/gtkblist.c:3558 msgid "Re-enable Account" msgstr "Konten reaktivieren" -#: ../src/gtkblist.c:3570 +#: ../src/gtkblist.c:3579 #, c-format msgid "<span color=\"red\">%s disconnected: %s</span>" msgstr "<span color=\"red\">%s abgemeldet: %s</span>" -#: ../src/gtkblist.c:3697 +#: ../src/gtkblist.c:3706 msgid "/Accounts" msgstr "/Konten" #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../src/gtkblist.c:3802 +#: ../src/gtkblist.c:3811 msgid "/Buddies/Show Offline Buddies" msgstr "/Buddys/Zeige Offline Buddys" -#: ../src/gtkblist.c:3805 +#: ../src/gtkblist.c:3814 msgid "/Buddies/Show Empty Groups" msgstr "/Buddys/Zeige leere Gruppen" -#: ../src/gtkblist.c:3811 +#: ../src/gtkblist.c:3820 msgid "/Buddies/Show Buddy Details" msgstr "/Buddys/Zeige Buddy-Details" -#: ../src/gtkblist.c:3814 +#: ../src/gtkblist.c:3823 msgid "/Buddies/Show Idle Times" msgstr "/Buddys/Zeige Untätigkeitszeiten" -#: ../src/gtkblist.c:4550 +#: ../src/gtkblist.c:4556 msgid "" "Please enter the screen name of the person you would like to add to your " "buddy list. You may optionally enter an alias, or nickname, for the buddy. " @@ -2814,25 +2814,25 @@ "immer es möglich ist.\n" #. Set up stuff for the account box -#: ../src/gtkblist.c:4620 ../src/gtkblist.c:4939 +#: ../src/gtkblist.c:4626 ../src/gtkblist.c:4945 msgid "Account:" msgstr "Konto:" -#: ../src/gtkblist.c:4872 +#: ../src/gtkblist.c:4878 msgid "This protocol does not support chat rooms." msgstr "Dieses Protokoll unterstützt keine Chaträume." -#: ../src/gtkblist.c:4888 +#: ../src/gtkblist.c:4894 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." msgstr "Sie sind derzeit mit keinem Chat-fähigen Protokoll angemeldet." -#: ../src/gtkblist.c:4905 +#: ../src/gtkblist.c:4911 msgid "Add Chat" msgstr "Chat hinzufügen" -#: ../src/gtkblist.c:4929 +#: ../src/gtkblist.c:4935 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -2840,40 +2840,40 @@ "Bitte geben Sie einen Alias und geeignete Informationen über den Chat ein, " "den Sie in Ihre Buddy-Liste aufnehmen wollen.\n" -#: ../src/gtkblist.c:5011 ../src/protocols/sametime/sametime.c:5318 -#: ../src/protocols/sametime/sametime.c:5405 +#: ../src/gtkblist.c:5017 ../src/protocols/sametime/sametime.c:5316 +#: ../src/protocols/sametime/sametime.c:5403 msgid "Add Group" msgstr "Gruppe hinzufügen" -#: ../src/gtkblist.c:5012 +#: ../src/gtkblist.c:5018 msgid "Please enter the name of the group to be added." msgstr "Bitte geben Sie den Namen der Gruppe ein, die hinzugefügt werden soll." -#: ../src/gtkblist.c:5631 +#: ../src/gtkblist.c:5637 msgid "_Edit Account" msgstr "Konto _bearbeiten" -#: ../src/gtkblist.c:5664 ../src/gtkblist.c:5670 +#: ../src/gtkblist.c:5670 ../src/gtkblist.c:5676 ../src/gtkconv.c:2747 msgid "No actions available" msgstr "Keine Aktionen verfügbar" -#: ../src/gtkblist.c:5678 +#: ../src/gtkblist.c:5684 msgid "_Disable" msgstr "_Deaktivieren" -#: ../src/gtkblist.c:5690 +#: ../src/gtkblist.c:5696 msgid "Enable Account" msgstr "Konten aktivieren" -#: ../src/gtkblist.c:5743 +#: ../src/gtkblist.c:5749 msgid "/Tools" msgstr "/Werkzeuge" -#: ../src/gtkblist.c:5829 +#: ../src/gtkblist.c:5835 msgid "/Buddies/Sort Buddies" msgstr "/Buddys/Buddys _sortieren" -#: ../src/gtkconn.c:197 +#: ../src/gtkconn.c:185 #, c-format msgid "" "%s was disconnected due to an error: %s\n" @@ -2901,48 +2901,48 @@ "zu erhalten.\n" "Die folgenden Kommandos sind in diesem Kontext verfügbar:\n" -#: ../src/gtkconv.c:482 +#: ../src/gtkconv.c:478 msgid "No such command." msgstr "Es gibt kein solches Kommando." -#: ../src/gtkconv.c:489 +#: ../src/gtkconv.c:485 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "" "Syntaxfehler: Sie übergaben dem Kommando eine falsche Anzahl von Argumenten." -#: ../src/gtkconv.c:494 +#: ../src/gtkconv.c:490 msgid "Your command failed for an unknown reason." msgstr "Ihre Kommando scheiterte aus einem unbekannten Grund." -#: ../src/gtkconv.c:501 +#: ../src/gtkconv.c:497 msgid "That command only works in chats, not IMs." msgstr "Dieses Kommando funktioniert nur in Chats, nicht bei IMs." -#: ../src/gtkconv.c:504 +#: ../src/gtkconv.c:500 msgid "That command only works in IMs, not chats." msgstr "Dieses Kommando funktioniert nur bei IMs, nicht bei Chats." -#: ../src/gtkconv.c:508 +#: ../src/gtkconv.c:504 msgid "That command doesn't work on this protocol." msgstr "Dieses Kommando funktioniert nicht in diesem Protokoll." -#: ../src/gtkconv.c:742 ../src/gtkconv.c:768 +#: ../src/gtkconv.c:739 ../src/gtkconv.c:765 msgid "That buddy is not on the same protocol as this chat." msgstr "Der Buddy hat nicht das gleiche Protokoll wie dieser Chat." -#: ../src/gtkconv.c:762 +#: ../src/gtkconv.c:759 msgid "" "You are not currently signed on with an account that can invite that buddy." msgstr "" "Sie sind im Moment nicht mit einem Konto angemeldet, welches benutzt werden " "kann, um diesen Buddy einzuladen." -#: ../src/gtkconv.c:815 +#: ../src/gtkconv.c:812 msgid "Invite Buddy Into Chat Room" msgstr "Buddy in einen Chatraum einladen" #. Put our happy label in it. -#: ../src/gtkconv.c:845 +#: ../src/gtkconv.c:842 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." @@ -2950,318 +2950,330 @@ "Bitte geben Sie den Benutzernamen der Person ein, die Sie einladen möchten " "zusammen mit einer optionalen Einladungsnachricht." -#: ../src/gtkconv.c:866 +#: ../src/gtkconv.c:863 msgid "_Buddy:" msgstr "_Buddy:" -#: ../src/gtkconv.c:886 ../src/gtksavedstatuses.c:1107 -#: ../src/gtksavedstatuses.c:1443 +#: ../src/gtkconv.c:883 ../src/gtksavedstatuses.c:1111 +#: ../src/gtksavedstatuses.c:1447 msgid "_Message:" msgstr "_Nachricht:" -#: ../src/gtkconv.c:943 ../src/gtkconv.c:2378 ../src/gtkdebug.c:217 +#: ../src/gtkconv.c:940 ../src/gtkconv.c:2364 ../src/gtkdebug.c:217 #: ../src/gtkft.c:490 msgid "Unable to open file." msgstr "Konnte die Datei nicht öffnen." -#: ../src/gtkconv.c:949 +#: ../src/gtkconv.c:946 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>Unterhaltung mit %s</h1>\n" -#: ../src/gtkconv.c:973 +#: ../src/gtkconv.c:970 msgid "Save Conversation" msgstr "Unterhaltung speichern" -#: ../src/gtkconv.c:1094 ../src/gtkdebug.c:165 ../src/gtkdebug.c:678 +#: ../src/gtkconv.c:1091 ../src/gtkdebug.c:165 ../src/gtkdebug.c:678 msgid "Find" msgstr "Suchen" -#: ../src/gtkconv.c:1120 ../src/gtkdebug.c:193 +#: ../src/gtkconv.c:1117 ../src/gtkdebug.c:193 msgid "_Search for:" msgstr "_Suche nach:" -#: ../src/gtkconv.c:1291 +#: ../src/gtkconv.c:1288 msgid "Logging started. Future messages in this conversation will be logged." msgstr "" "Mitschnitt gestartet. Zukünftige Nachrichten dieser Unterhaltung werden " "mitgeschnitten." -#: ../src/gtkconv.c:1299 +#: ../src/gtkconv.c:1296 msgid "" "Logging stopped. Future messages in this conversation will not be logged." msgstr "" "Mitschnitt angehalten. Zukünftige Nachrichten dieser Unterhaltung werden " "nicht mitgeschnitten." -#: ../src/gtkconv.c:1560 +#: ../src/gtkconv.c:1558 msgid "IM" msgstr "Nachricht" -#: ../src/gtkconv.c:1571 ../src/protocols/oscar/oscar.c:640 +#: ../src/gtkconv.c:1569 ../src/protocols/oscar/oscar.c:640 msgid "Send File" msgstr "Datei versenden" -#: ../src/gtkconv.c:1586 +#: ../src/gtkconv.c:1584 msgid "Un-Ignore" msgstr "Nicht Ignorieren" -#: ../src/gtkconv.c:1589 +#: ../src/gtkconv.c:1587 msgid "Ignore" msgstr "Ignorieren" -#: ../src/gtkconv.c:1599 +#: ../src/gtkconv.c:1597 msgid "Info" msgstr "Info" -#: ../src/gtkconv.c:1609 +#: ../src/gtkconv.c:1607 msgid "Get Away Message" msgstr "Neue Abwesenheitsnachricht abholen" -#: ../src/gtkconv.c:1632 +#: ../src/gtkconv.c:1630 msgid "Last said" msgstr "Zuletzt gesagt" -#: ../src/gtkconv.c:2386 +#: ../src/gtkconv.c:2372 msgid "Unable to save icon file to disk." msgstr "Kann Icon-Datei nicht auf die Festplatte speichern." -#: ../src/gtkconv.c:2410 +#: ../src/gtkconv.c:2396 msgid "Save Icon" msgstr "Icon speichern" -#: ../src/gtkconv.c:2459 +#: ../src/gtkconv.c:2445 msgid "Animate" msgstr "Animieren" -#: ../src/gtkconv.c:2464 +#: ../src/gtkconv.c:2450 msgid "Hide Icon" msgstr "Icon verbergen" -#: ../src/gtkconv.c:2470 +#: ../src/gtkconv.c:2456 msgid "Save Icon As..." msgstr "Icon speichern unter..." #. Conversation menu -#: ../src/gtkconv.c:2611 +#: ../src/gtkconv.c:2596 msgid "/_Conversation" msgstr "/_Unterhaltung" -#: ../src/gtkconv.c:2613 +#: ../src/gtkconv.c:2598 msgid "/Conversation/New Instant _Message..." msgstr "/Unterhaltung/_Neue Sofortnachricht..." -#: ../src/gtkconv.c:2618 +#: ../src/gtkconv.c:2603 msgid "/Conversation/_Find..." msgstr "/Unterhaltung/_Finden..." -#: ../src/gtkconv.c:2620 +#: ../src/gtkconv.c:2605 msgid "/Conversation/View _Log" msgstr "/Unterhaltung/Betrachte _Mitschnitt" -#: ../src/gtkconv.c:2621 +#: ../src/gtkconv.c:2606 msgid "/Conversation/_Save As..." msgstr "/Unterhaltung/_Speichern als..." -#: ../src/gtkconv.c:2623 +#: ../src/gtkconv.c:2608 msgid "/Conversation/Clea_r Scrollback" msgstr "/Unterhaltung/_Leeren" -#: ../src/gtkconv.c:2627 +#: ../src/gtkconv.c:2612 msgid "/Conversation/Se_nd File..." msgstr "/Unterhaltung/Datei _senden..." -#: ../src/gtkconv.c:2628 +#: ../src/gtkconv.c:2613 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Unterhaltung/Buddy-Alar_m hinzufügen..." -#: ../src/gtkconv.c:2630 +#: ../src/gtkconv.c:2615 msgid "/Conversation/_Get Info" msgstr "/Unterhaltung/B_enutzer-Info abrufen" -#: ../src/gtkconv.c:2632 +#: ../src/gtkconv.c:2617 msgid "/Conversation/In_vite..." msgstr "/Unterhaltung/_Einladen..." -#: ../src/gtkconv.c:2637 +#: ../src/gtkconv.c:2619 +msgid "/Conversation/M_ore" +msgstr "/Unterhaltung/M_ehr" + +#: ../src/gtkconv.c:2623 msgid "/Conversation/Al_ias..." msgstr "/Unterhaltung/Al_ias..." -#: ../src/gtkconv.c:2639 +#: ../src/gtkconv.c:2625 msgid "/Conversation/_Block..." msgstr "/Unterhaltung/_Blockieren..." -#: ../src/gtkconv.c:2641 +#: ../src/gtkconv.c:2627 msgid "/Conversation/_Add..." msgstr "/Unterhaltung/_Hinzufügen..." -#: ../src/gtkconv.c:2643 +#: ../src/gtkconv.c:2629 msgid "/Conversation/_Remove..." msgstr "/Unterhaltung/_Entfernen..." -#: ../src/gtkconv.c:2648 +#: ../src/gtkconv.c:2634 msgid "/Conversation/Insert Lin_k..." msgstr "/Unterhaltung/Füge Lin_k ein..." -#: ../src/gtkconv.c:2650 +#: ../src/gtkconv.c:2636 msgid "/Conversation/Insert Imag_e..." msgstr "/Unterhaltung/Füge Bil_d ein ..." -#: ../src/gtkconv.c:2655 +#: ../src/gtkconv.c:2641 msgid "/Conversation/_Close" msgstr "/Unterhaltung/S_chließen" #. Options -#: ../src/gtkconv.c:2659 +#: ../src/gtkconv.c:2645 msgid "/_Options" msgstr "/_Optionen" -#: ../src/gtkconv.c:2660 +#: ../src/gtkconv.c:2646 msgid "/Options/Enable _Logging" msgstr "/Optionen/Schalte _Mitschnitt ein" -#: ../src/gtkconv.c:2661 +#: ../src/gtkconv.c:2647 msgid "/Options/Enable _Sounds" msgstr "/Optionen/Schalte _Klänge ein" -#: ../src/gtkconv.c:2662 +#: ../src/gtkconv.c:2648 msgid "/Options/Show Buddy _Icon" msgstr "/Optionen/Buddy-_Icon anzeigen" -#: ../src/gtkconv.c:2664 +#: ../src/gtkconv.c:2650 msgid "/Options/Show Formatting _Toolbars" msgstr "/Optionen/Zeige _Werkzeugleisten für Formatierung" -#: ../src/gtkconv.c:2665 +#: ../src/gtkconv.c:2651 msgid "/Options/Show Ti_mestamps" msgstr "/Optionen/Zeige Zeitste_mpel" -#: ../src/gtkconv.c:2757 +#: ../src/gtkconv.c:2726 +msgid "/Conversation/More" +msgstr "/Unterhaltung/Mehr" + +#: ../src/gtkconv.c:2764 ../src/gtkconv.c:2791 +msgid "/Conversation" +msgstr "/Unterhaltung" + +#: ../src/gtkconv.c:2801 msgid "/Conversation/View Log" msgstr "/Unterhaltung/Betrachte Mitschnitt" -#: ../src/gtkconv.c:2763 +#: ../src/gtkconv.c:2807 msgid "/Conversation/Send File..." msgstr "/Unterhaltung/Datei senden ..." -#: ../src/gtkconv.c:2767 +#: ../src/gtkconv.c:2811 msgid "/Conversation/Add Buddy Pounce..." msgstr "/Unterhaltung/Buddy-Alarm hinzufügen..." -#: ../src/gtkconv.c:2773 +#: ../src/gtkconv.c:2817 msgid "/Conversation/Get Info" msgstr "/Unterhaltung/Info abrufen" -#: ../src/gtkconv.c:2777 +#: ../src/gtkconv.c:2821 msgid "/Conversation/Invite..." msgstr "/Unterhaltung/Einladen ..." -#: ../src/gtkconv.c:2783 +#: ../src/gtkconv.c:2827 msgid "/Conversation/Alias..." msgstr "/Unterhaltung/Alias..." -#: ../src/gtkconv.c:2787 +#: ../src/gtkconv.c:2831 msgid "/Conversation/Block..." msgstr "/Unterhaltung/Blockieren..." -#: ../src/gtkconv.c:2791 +#: ../src/gtkconv.c:2835 msgid "/Conversation/Add..." msgstr "/Unterhaltung/Hinzufügen..." -#: ../src/gtkconv.c:2795 +#: ../src/gtkconv.c:2839 msgid "/Conversation/Remove..." msgstr "/Unterhaltung/Entfernen..." -#: ../src/gtkconv.c:2801 +#: ../src/gtkconv.c:2845 msgid "/Conversation/Insert Link..." msgstr "/Unterhaltung/Füge Link ein..." -#: ../src/gtkconv.c:2805 +#: ../src/gtkconv.c:2849 msgid "/Conversation/Insert Image..." msgstr "/Unterhaltung/Füge Bild ein ..." -#: ../src/gtkconv.c:2811 +#: ../src/gtkconv.c:2855 msgid "/Options/Enable Logging" msgstr "/Optionen/Schalte Mitschnitt ein" -#: ../src/gtkconv.c:2814 +#: ../src/gtkconv.c:2858 msgid "/Options/Enable Sounds" msgstr "/Optionen/Schalte Klänge ein" -#: ../src/gtkconv.c:2827 +#: ../src/gtkconv.c:2871 msgid "/Options/Show Formatting Toolbars" msgstr "/Optionen/Zeige Werkzeugleisten für Formatierung" -#: ../src/gtkconv.c:2830 +#: ../src/gtkconv.c:2874 msgid "/Options/Show Timestamps" msgstr "/Optionen/Zeige Zeitstempel" -#: ../src/gtkconv.c:2833 +#: ../src/gtkconv.c:2877 msgid "/Options/Show Buddy Icon" msgstr "/Optionen/Zeige Buddy-Icon" -#: ../src/gtkconv.c:2913 +#: ../src/gtkconv.c:2953 msgid "User is typing..." msgstr "Benutzer tippt gerade..." -#: ../src/gtkconv.c:2916 +#: ../src/gtkconv.c:2956 msgid "User has typed something and stopped" msgstr "Benutzer hat etwas getippt und wartet nun" #. Build the Send To menu -#: ../src/gtkconv.c:3099 +#: ../src/gtkconv.c:3139 msgid "_Send To" msgstr "_Senden an" -#: ../src/gtkconv.c:3751 +#: ../src/gtkconv.c:3791 msgid "_Send" msgstr "Ab_schicken" -#: ../src/gtkconv.c:3806 ../src/protocols/sametime/sametime.c:3571 +#: ../src/gtkconv.c:3846 ../src/protocols/sametime/sametime.c:3564 msgid "Topic:" msgstr "Thema:" #. Setup the label telling how many people are in the room. -#: ../src/gtkconv.c:3858 +#: ../src/gtkconv.c:3898 msgid "0 people in room" msgstr "0 Personen im Raum" -#: ../src/gtkconv.c:3937 +#: ../src/gtkconv.c:3977 msgid "IM the user" msgstr "Benutzer eine IM schicken" -#: ../src/gtkconv.c:3950 +#: ../src/gtkconv.c:3990 msgid "Ignore the user" msgstr "Benutzer ignorieren" -#: ../src/gtkconv.c:3962 +#: ../src/gtkconv.c:4002 msgid "Get the user's information" msgstr "Information zum Benutzer abrufen" -#: ../src/gtkconv.c:4944 ../src/gtkconv.c:5053 +#: ../src/gtkconv.c:4993 ../src/gtkconv.c:5102 #, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "%d Person im Raum" msgstr[1] "%d Personen im Raum" -#: ../src/gtkconv.c:5610 ../src/gtkstatusbox.c:366 +#: ../src/gtkconv.c:5659 ../src/gtkstatusbox.c:366 msgid "Typing" msgstr "Tippt gerade" -#: ../src/gtkconv.c:5616 +#: ../src/gtkconv.c:5665 msgid "Stopped Typing" msgstr "Tippen gestoppt" -#: ../src/gtkconv.c:5621 +#: ../src/gtkconv.c:5670 msgid "Nick Said" msgstr "Spitzname gesagt" -#: ../src/gtkconv.c:5631 +#: ../src/gtkconv.c:5680 msgid "New Event" msgstr "Neue Ereignisse" -#: ../src/gtkconv.c:6521 +#: ../src/gtkconv.c:6570 msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -3269,13 +3281,13 @@ "say <Nachricht>: Sendet eine Nachricht genau so, als wenn Sie die " "Nachricht ohne ein Kommando absenden." -#: ../src/gtkconv.c:6524 +#: ../src/gtkconv.c:6573 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "" "me <Aktion>: Sende eine IRC-ähnliche Aktion an einen Buddy oder einen " "Chat." -#: ../src/gtkconv.c:6527 +#: ../src/gtkconv.c:6576 msgid "" "debug <option>: Send various debug information to the current " "conversation." @@ -3283,60 +3295,60 @@ "debug <Option>: Verschiedene Debugging-Informationen zur aktuellen " "Unterhaltung senden." -#: ../src/gtkconv.c:6530 +#: ../src/gtkconv.c:6579 msgid "clear: Clears the conversation scrollback." msgstr "clear: Leert das Gesprächsfenster." -#: ../src/gtkconv.c:6533 +#: ../src/gtkconv.c:6582 msgid "help <command>: Help on a specific command." msgstr "help <Kommando>: Hilfe zu einem bestimmten Kommando." -#: ../src/gtkconv.c:6692 +#: ../src/gtkconv.c:6741 msgid "Confirm close" msgstr "Schließen bestätigen" -#: ../src/gtkconv.c:6724 +#: ../src/gtkconv.c:6773 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "" "Sie haben ungelesene Nachrichten. Wollen Sie das Fenster wirklich schließen?" -#: ../src/gtkconv.c:7246 +#: ../src/gtkconv.c:7295 msgid "Close other tabs" msgstr "Andere Reiter schließen" -#: ../src/gtkconv.c:7252 +#: ../src/gtkconv.c:7301 msgid "Close all tabs" msgstr "Alle Reiter schließen" -#: ../src/gtkconv.c:7260 +#: ../src/gtkconv.c:7309 msgid "Detach this tab" msgstr "Diesen Reiter ablösen" -#: ../src/gtkconv.c:7266 +#: ../src/gtkconv.c:7315 msgid "Close this tab" msgstr "Diesen Reiter schließen" -#: ../src/gtkconv.c:7526 +#: ../src/gtkconv.c:7575 msgid "Close conversation" msgstr "Unterhaltung schließen" -#: ../src/gtkconv.c:7990 +#: ../src/gtkconv.c:8039 msgid "Last created window" msgstr "Letztes erstelltes Fenster" -#: ../src/gtkconv.c:7992 +#: ../src/gtkconv.c:8041 msgid "Separate IM and Chat windows" msgstr "Getrennte IM- und Chat-Fenster" -#: ../src/gtkconv.c:7994 ../src/gtkprefs.c:1258 +#: ../src/gtkconv.c:8043 ../src/gtkprefs.c:1258 msgid "New window" msgstr "Neues Fenster" -#: ../src/gtkconv.c:7996 +#: ../src/gtkconv.c:8045 msgid "By group" msgstr "Nach Gruppe" -#: ../src/gtkconv.c:7998 +#: ../src/gtkconv.c:8047 msgid "By account" msgstr "Nach Konto" @@ -3421,7 +3433,7 @@ msgid "original author" msgstr "Originalautor" -#: ../src/gtkdialogs.c:110 ../src/gtkdialogs.c:111 ../src/gtkdialogs.c:169 +#: ../src/gtkdialogs.c:110 ../src/gtkdialogs.c:111 ../src/gtkdialogs.c:174 msgid "Bulgarian" msgstr "Bulgarisch" @@ -3433,186 +3445,194 @@ msgid "Bosnian" msgstr "Bosnisch" -#: ../src/gtkdialogs.c:115 ../src/gtkdialogs.c:170 ../src/gtkdialogs.c:171 +#: ../src/gtkdialogs.c:115 ../src/gtkdialogs.c:175 ../src/gtkdialogs.c:176 msgid "Catalan" msgstr "Katalanisch" -#: ../src/gtkdialogs.c:116 -msgid "Valencian" -msgstr "Valencianisch" +#: ../src/gtkdialogs.c:116 ../src/gtkdialogs.c:117 +msgid "Valencian-Catalan" +msgstr "Valencianisch-Katalanisch" -#: ../src/gtkdialogs.c:117 ../src/gtkdialogs.c:172 +#: ../src/gtkdialogs.c:118 ../src/gtkdialogs.c:177 msgid "Czech" msgstr "Tschechisch" -#: ../src/gtkdialogs.c:118 +#: ../src/gtkdialogs.c:119 msgid "Danish" msgstr "Dänisch" -#: ../src/gtkdialogs.c:119 ../src/gtkdialogs.c:120 ../src/gtkdialogs.c:173 +#: ../src/gtkdialogs.c:120 ../src/gtkdialogs.c:121 ../src/gtkdialogs.c:178 msgid "German" msgstr "Deutsch" -#: ../src/gtkdialogs.c:121 ../src/gtkdialogs.c:122 +#: ../src/gtkdialogs.c:122 ../src/gtkdialogs.c:123 msgid "Greek" msgstr "Griechisch" -#: ../src/gtkdialogs.c:123 +#: ../src/gtkdialogs.c:124 msgid "Australian English" msgstr "Australisches Englisch" -#: ../src/gtkdialogs.c:124 +#: ../src/gtkdialogs.c:125 msgid "Canadian English" msgstr "Kanadisches Englisch" -#: ../src/gtkdialogs.c:125 +#: ../src/gtkdialogs.c:126 msgid "British English" msgstr "Britisches Englisch" -#: ../src/gtkdialogs.c:126 ../src/gtkdialogs.c:174 ../src/gtkdialogs.c:175 -#: ../src/gtkdialogs.c:176 ../src/gtkdialogs.c:177 +#: ../src/gtkdialogs.c:127 ../src/gtkdialogs.c:179 ../src/gtkdialogs.c:180 +#: ../src/gtkdialogs.c:181 ../src/gtkdialogs.c:182 msgid "Spanish" msgstr "Spanisch" -#: ../src/gtkdialogs.c:127 ../src/gtkdialogs.c:128 +#: ../src/gtkdialogs.c:128 ../src/gtkdialogs.c:129 +msgid ... [truncated message content] |
From: <ebl...@us...> - 2006-08-14 21:46:24
|
Revision: 16759 Author: eblanton Date: 2006-08-14 14:46:17 -0700 (Mon, 14 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16759&view=rev Log Message: ----------- This initializes threads for glib and dbus, because under some circumstances multithreaded libraries are causing dbus badness (namely, gnome-vfs). This fix doesn't really belong in Gaim, but in the interest of expedience (we don't want to wait for upstream libraries to get their initializations all worked around to make things safe) the fix goes here. Note that all Gaim frontends will have to initialize glib threads if other threaded libraries which interact with glib or dbus or what-have-you come into play. Modified Paths: -------------- trunk/configure.ac trunk/src/Makefile.am trunk/src/dbus-server.c trunk/src/gtkmain.c Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-08-14 16:07:20 UTC (rev 16758) +++ trunk/configure.ac 2006-08-14 21:46:17 UTC (rev 16759) @@ -636,7 +636,7 @@ AM_PATH_GLIB_2_0(2.0.0,,AC_MSG_ERROR([ *** GLib 2.0 is required to build Gaim; please make sure you have the GLib *** development headers installed. The latest version of GLib is -*** always available at http://www.gtk.org/.])) +*** always available at http://www.gtk.org/.]),gthread) AM_PATH_GTK_2_0(2.0.0,,AC_MSG_ERROR([ *** GTK+ 2.0 is required to build Gaim; please make sure you have the GTK+ *** development headers installed. The latest version of GTK+ is Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2006-08-14 16:07:20 UTC (rev 16758) +++ trunk/src/Makefile.am 2006-08-14 21:46:17 UTC (rev 16759) @@ -339,6 +339,7 @@ gaim_LDFLAGS = -export-dynamic gaim_LDADD = \ @LIBOBJS@ \ + $(GLIB_LIBS) \ $(GTK_LIBS) \ $(DBUS_LIBS) \ $(GSTREAMER_LIBS) \ Modified: trunk/src/dbus-server.c =================================================================== --- trunk/src/dbus-server.c 2006-08-14 16:07:20 UTC (rev 16758) +++ trunk/src/dbus-server.c 2006-08-14 21:46:17 UTC (rev 16759) @@ -757,6 +757,9 @@ void gaim_dbus_init(void) { + if (g_thread_supported()) + dbus_g_thread_init(); + gaim_dbus_init_ids(); g_free(init_error); Modified: trunk/src/gtkmain.c =================================================================== --- trunk/src/gtkmain.c 2006-08-14 16:07:20 UTC (rev 16758) +++ trunk/src/gtkmain.c 2006-08-14 21:46:17 UTC (rev 16759) @@ -643,6 +643,15 @@ gtk_rc_add_default_file(search_path); g_free(search_path); +#if (defined(G_THREADS_ENABLED) && !defined(G_THREADS_IMPL_NONE)) + /* Since threads can be yanked in all unawares by other libraries, + * and some libraries aren't smart enough to initialize the thread + * subsystem when they need it, we need to do this here. We also + * threadify dbus when that gets initialized. Ugh. */ + if (!g_thread_supported()) + g_thread_init(NULL); + gdk_threads_init(); +#endif /* Glib has threads */ gui_check = gtk_init_check(&argc, &argv); if (!gui_check) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-08-17 22:42:33
|
Revision: 16819 Author: seanegan Date: 2006-08-17 15:42:28 -0700 (Thu, 17 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16819&view=rev Log Message: ----------- Patch to eggtrayicon by Dan Winship makes icon transparent Modified Paths: -------------- trunk/COPYRIGHT trunk/ChangeLog trunk/plugins/docklet/eggtrayicon.c Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2006-08-17 21:16:50 UTC (rev 16818) +++ trunk/COPYRIGHT 2006-08-17 22:42:28 UTC (rev 16819) @@ -317,6 +317,7 @@ Dan Willemsen Jason Willis Matt Wilson +Dan Winship Scott Wolchok Pui Lam Wong Justin Wood Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-08-17 21:16:50 UTC (rev 16818) +++ trunk/ChangeLog 2006-08-17 22:42:28 UTC (rev 16819) @@ -99,6 +99,7 @@ removed. * 'Highlight when nick said' option added to Message Notification plugin. + * The system tray icon is now transparent (Dan Winship) MSN Features: * Custom smiley receiving support (Irving Cordova & Francesco Fracassi) Modified: trunk/plugins/docklet/eggtrayicon.c =================================================================== --- trunk/plugins/docklet/eggtrayicon.c 2006-08-17 21:16:50 UTC (rev 16818) +++ trunk/plugins/docklet/eggtrayicon.c 2006-08-17 22:42:28 UTC (rev 16819) @@ -54,6 +54,9 @@ static void egg_tray_icon_realize (GtkWidget *widget); static void egg_tray_icon_unrealize (GtkWidget *widget); +static void egg_tray_icon_add (GtkContainer *container, + GtkWidget *widget); + static void egg_tray_icon_update_manager_window (EggTrayIcon *icon, gboolean dock_if_realized); static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon); @@ -109,6 +112,7 @@ { GObjectClass *gobject_class = (GObjectClass *)klass; GtkWidgetClass *widget_class = (GtkWidgetClass *)klass; + GtkContainerClass *container_class = (GtkContainerClass *)klass; parent_class = g_type_class_peek_parent (klass); @@ -117,6 +121,8 @@ widget_class->realize = egg_tray_icon_realize; widget_class->unrealize = egg_tray_icon_unrealize; + container_class->add = egg_tray_icon_add; + g_object_class_install_property (gobject_class, PROP_ORIENTATION, g_param_spec_enum ("orientation", @@ -374,7 +380,37 @@ egg_tray_icon_update_manager_window (icon, TRUE); } +static gboolean +transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) +{ + gdk_window_clear_area (widget->window, event->area.x, event->area.y, + event->area.width, event->area.height); + return FALSE; +} + static void +make_transparent_again (GtkWidget *widget, GtkStyle *previous_style, + gpointer user_data) +{ + gdk_window_set_back_pixmap(widget->window, NULL, TRUE); +} + +static void +make_transparent (GtkWidget *widget, gpointer user_data) +{ + if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget)) + return; + + gtk_widget_set_app_paintable (widget, TRUE); + gtk_widget_set_double_buffered (widget, FALSE); + gdk_window_set_back_pixmap (widget->window, NULL, TRUE); + g_signal_connect (widget, "expose_event", + G_CALLBACK (transparent_expose_event), NULL); + g_signal_connect_after (widget, "style_set", + G_CALLBACK (make_transparent_again), NULL); +} + +static void egg_tray_icon_realize (GtkWidget *widget) { EggTrayIcon *icon = EGG_TRAY_ICON (widget); @@ -386,6 +422,8 @@ if (GTK_WIDGET_CLASS (parent_class)->realize) GTK_WIDGET_CLASS (parent_class)->realize (widget); + make_transparent (widget, NULL); + #if GTK_CHECK_VERSION(2,1,0) screen = gdk_screen_get_number (gtk_widget_get_screen (widget)); xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget)); @@ -425,6 +463,14 @@ egg_tray_icon_manager_filter, icon); } +static void +egg_tray_icon_add (GtkContainer *container, GtkWidget *widget) +{ + g_signal_connect (widget, "realize", + G_CALLBACK (make_transparent), NULL); + GTK_CONTAINER_CLASS (parent_class)->add (container, widget); +} + #if GTK_CHECK_VERSION(2,1,0) EggTrayIcon * egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ev...@us...> - 2006-08-19 00:56:03
|
Revision: 16855 Author: evands Date: 2006-08-18 17:52:24 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16855&view=rev Log Message: ----------- ** Part 1 of a 4 part commit ** Restructured the tree and the build files for the core/UI split. libgaim is now built as a library against which gtkgaim and gntgaim link and can be built separately from them by configuring with them disable d (--disable-gtkgaim and --disable-gntgaim). Each of the three source trees (gtk, console, and core) has its own plugins folder. This works nicely on my system; hopefully it won't cause too much chaos for others. If you have local changes, an easy way to merge them to the new layout should be along the lines of svn diff -r version_before_move > myChanges.diff patch -p1 < myChanges.diff where svn diff is done from the gaim checkout root but patch is done from gtk or core (or both). This changeset combines work by Sadrul Chowdhury, Gary Kramlich (grim), and me. Known issues: * On my system, at least, something's not quite right with the gtkgaim build process; it imports gtkgaim.h (as can be seen by adding a #warning) but <gtk/gtk.h> doesn't seem to be used. The GTK_STOCK_XXX defi nes claim to be undeclared. I was going to make this work before committing, but I strongly suspect someone with more autotools experience will be able to fix it easily whereas I've already glared at it for a n hour. * The gnt console UI depends on libgnt, which is not yet automatically built. Either autogen.sh && make && make install libgnt (in console/libgnt) or configure with --disable-gnt for now. * The Windows build process has not been touched yet so still needs updating. * There's an stray "rm: core: is a directory" warning after autogen.sh is compl te. I'm not sure where that's coming from. Added Paths: ----------- trunk/gtk/ trunk/gtk/Makefile.am trunk/gtk/gaimcombobox.c trunk/gtk/gaimcombobox.h trunk/gtk/gaimstock.c trunk/gtk/gaimstock.h trunk/gtk/getopt.c trunk/gtk/getopt.h trunk/gtk/getopt1.c trunk/gtk/gtkaccount.c trunk/gtk/gtkaccount.h trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/gtkcelllayout.c trunk/gtk/gtkcelllayout.h trunk/gtk/gtkcellrendererprogress.c trunk/gtk/gtkcellrendererprogress.h trunk/gtk/gtkcellview.c trunk/gtk/gtkcellview.h trunk/gtk/gtkcellviewmenuitem.c trunk/gtk/gtkcellviewmenuitem.h trunk/gtk/gtkconn.c trunk/gtk/gtkconn.h trunk/gtk/gtkconv.c trunk/gtk/gtkconv.h trunk/gtk/gtkconvwin.h trunk/gtk/gtkdebug.c trunk/gtk/gtkdebug.h trunk/gtk/gtkdialogs.c trunk/gtk/gtkdialogs.h trunk/gtk/gtkdnd-hints.c trunk/gtk/gtkdnd-hints.h trunk/gtk/gtkeventloop.c trunk/gtk/gtkeventloop.h trunk/gtk/gtkexpander.c trunk/gtk/gtkexpander.h trunk/gtk/gtkft.c trunk/gtk/gtkft.h trunk/gtk/gtkgaim.h trunk/gtk/gtkidle.c trunk/gtk/gtkidle.h trunk/gtk/gtkimhtml.c trunk/gtk/gtkimhtml.h trunk/gtk/gtkimhtmltoolbar.c trunk/gtk/gtkimhtmltoolbar.h trunk/gtk/gtklog.c trunk/gtk/gtklog.h trunk/gtk/gtkmain.c trunk/gtk/gtkmenutray.c trunk/gtk/gtkmenutray.h trunk/gtk/gtknickcolors.h trunk/gtk/gtknotify.c trunk/gtk/gtknotify.h trunk/gtk/gtkplugin.c trunk/gtk/gtkplugin.h trunk/gtk/gtkpluginpref.c trunk/gtk/gtkpluginpref.h trunk/gtk/gtkpounce.c trunk/gtk/gtkpounce.h trunk/gtk/gtkprefs.c trunk/gtk/gtkprefs.h trunk/gtk/gtkprivacy.c trunk/gtk/gtkprivacy.h trunk/gtk/gtkrequest.c trunk/gtk/gtkrequest.h trunk/gtk/gtkroomlist.c trunk/gtk/gtkroomlist.h trunk/gtk/gtksavedstatuses.c trunk/gtk/gtksavedstatuses.h trunk/gtk/gtksession.c trunk/gtk/gtksession.h trunk/gtk/gtksound.c trunk/gtk/gtksound.h trunk/gtk/gtksourceiter.c trunk/gtk/gtksourceiter.h trunk/gtk/gtkstatusbox.c trunk/gtk/gtkstatusbox.h trunk/gtk/gtkstock.h trunk/gtk/gtkthemes.c trunk/gtk/gtkthemes.h trunk/gtk/gtkutils.c trunk/gtk/gtkutils.h trunk/gtk/gtkwhiteboard.c trunk/gtk/gtkwhiteboard.h trunk/gtk/pixmaps/ trunk/gtk/pixmaps/Makefile.am trunk/gtk/pixmaps/Makefile.mingw trunk/gtk/pixmaps/about_menu.png trunk/gtk/pixmaps/accounts.png trunk/gtk/pixmaps/away.png trunk/gtk/pixmaps/change-bgcolor-small.png trunk/gtk/pixmaps/change-fgcolor-small.png trunk/gtk/pixmaps/connect.png trunk/gtk/pixmaps/edit.png trunk/gtk/pixmaps/gaim-install.ico trunk/gtk/pixmaps/gaim.ico trunk/gtk/pixmaps/gaim.png trunk/gtk/pixmaps/gaim.svg trunk/gtk/pixmaps/gaim_16.ico trunk/gtk/pixmaps/gaim_4bit_16.ico trunk/gtk/pixmaps/gaim_auth.png trunk/gtk/pixmaps/gaim_away.ico trunk/gtk/pixmaps/gaim_away_16.ico trunk/gtk/pixmaps/gaim_away_4bit_16.ico trunk/gtk/pixmaps/gaim_blank_4bit_16.ico trunk/gtk/pixmaps/gaim_cool.png trunk/gtk/pixmaps/gaim_error.png trunk/gtk/pixmaps/gaim_info.png trunk/gtk/pixmaps/gaim_msgpend_16.ico trunk/gtk/pixmaps/gaim_msgpend_4bit_16.ico trunk/gtk/pixmaps/gaim_msgunread_16.ico trunk/gtk/pixmaps/gaim_msgunread_4bit_16.ico trunk/gtk/pixmaps/gaim_offline.ico trunk/gtk/pixmaps/gaim_offline_16.ico trunk/gtk/pixmaps/gaim_offline_4bit_16.ico trunk/gtk/pixmaps/gaim_question.png trunk/gtk/pixmaps/gaim_warning.png trunk/gtk/pixmaps/info.png trunk/gtk/pixmaps/insert-image-small.png trunk/gtk/pixmaps/insert-link-small.png trunk/gtk/pixmaps/insert-smiley-small.png trunk/gtk/pixmaps/logo.png trunk/gtk/pixmaps/msgpend.png trunk/gtk/pixmaps/msgunread.png trunk/gtk/pixmaps/offline.png trunk/gtk/pixmaps/online.png trunk/gtk/pixmaps/pause.png trunk/gtk/pixmaps/phone.png trunk/gtk/pixmaps/send-im.png trunk/gtk/pixmaps/smileys/ trunk/gtk/pixmaps/status/ trunk/gtk/pixmaps/status-away.png trunk/gtk/pixmaps/status-connect0.png trunk/gtk/pixmaps/status-connect1.png trunk/gtk/pixmaps/status-connect2.png trunk/gtk/pixmaps/status-connect3.png trunk/gtk/pixmaps/status-invisible.png trunk/gtk/pixmaps/status-offline.png trunk/gtk/pixmaps/status-online.png trunk/gtk/pixmaps/status-typing0.png trunk/gtk/pixmaps/status-typing1.png trunk/gtk/pixmaps/status-typing2.png trunk/gtk/pixmaps/status-typing3.png trunk/gtk/pixmaps/stock_connect_16.png trunk/gtk/pixmaps/stock_disconnect_16.png trunk/gtk/pixmaps/tb_drag_arrow_down.xpm trunk/gtk/pixmaps/tb_drag_arrow_left.xpm trunk/gtk/pixmaps/tb_drag_arrow_right.xpm trunk/gtk/pixmaps/tb_drag_arrow_up.xpm trunk/gtk/pixmaps/text_bigger.png trunk/gtk/pixmaps/text_normal.png trunk/gtk/pixmaps/text_smaller.png trunk/gtk/pixmaps/typed.png trunk/gtk/pixmaps/typing.png trunk/gtk/plugins/ trunk/gtk/plugins/Makefile.am trunk/gtk/plugins/contact_priority.c trunk/gtk/plugins/crazychat/ trunk/gtk/plugins/crazychat/Makefile.am trunk/gtk/plugins/crazychat/QTUtilities.c trunk/gtk/plugins/crazychat/QTUtilities.h trunk/gtk/plugins/crazychat/Utilities.c trunk/gtk/plugins/crazychat/Utilities.h trunk/gtk/plugins/crazychat/camdata.c trunk/gtk/plugins/crazychat/camdata.h trunk/gtk/plugins/crazychat/camproc.c trunk/gtk/plugins/crazychat/camproc.h trunk/gtk/plugins/crazychat/cc_features.c trunk/gtk/plugins/crazychat/cc_gaim_plugin.c trunk/gtk/plugins/crazychat/cc_gtk_gl.c trunk/gtk/plugins/crazychat/cc_gtk_gl.h trunk/gtk/plugins/crazychat/cc_interface.h trunk/gtk/plugins/crazychat/cc_network.c trunk/gtk/plugins/crazychat/cc_network.h trunk/gtk/plugins/crazychat/cc_output.c trunk/gtk/plugins/crazychat/configure.ac trunk/gtk/plugins/crazychat/crazychat.c trunk/gtk/plugins/crazychat/crazychat.h trunk/gtk/plugins/crazychat/dog_lids.c trunk/gtk/plugins/crazychat/dog_lids.h trunk/gtk/plugins/crazychat/doggy.c trunk/gtk/plugins/crazychat/doggy.h trunk/gtk/plugins/crazychat/draw.c trunk/gtk/plugins/crazychat/eye.c trunk/gtk/plugins/crazychat/eye.h trunk/gtk/plugins/crazychat/eyes.c trunk/gtk/plugins/crazychat/eyes.h trunk/gtk/plugins/crazychat/face.c trunk/gtk/plugins/crazychat/face.h trunk/gtk/plugins/crazychat/filter.c trunk/gtk/plugins/crazychat/filter.h trunk/gtk/plugins/crazychat/glm.c trunk/gtk/plugins/crazychat/glm.h trunk/gtk/plugins/crazychat/lids.c trunk/gtk/plugins/crazychat/lids.h trunk/gtk/plugins/crazychat/main.c trunk/gtk/plugins/crazychat/mat_struct.h trunk/gtk/plugins/crazychat/models.c trunk/gtk/plugins/crazychat/models.h trunk/gtk/plugins/crazychat/sharky.c trunk/gtk/plugins/crazychat/sharky.h trunk/gtk/plugins/crazychat/test.h trunk/gtk/plugins/crazychat/util.h trunk/gtk/plugins/docklet/ trunk/gtk/plugins/docklet/Makefile.am trunk/gtk/plugins/docklet/Makefile.mingw trunk/gtk/plugins/docklet/MinimizeToTray.c trunk/gtk/plugins/docklet/MinimizeToTray.h trunk/gtk/plugins/docklet/docklet-win32.c trunk/gtk/plugins/docklet/docklet-x11.c trunk/gtk/plugins/docklet/docklet.c trunk/gtk/plugins/docklet/docklet.h trunk/gtk/plugins/docklet/eggtrayicon.c trunk/gtk/plugins/docklet/eggtrayicon.h trunk/gtk/plugins/extplacement.c trunk/gtk/plugins/gaiminc.c trunk/gtk/plugins/gaimrc.c trunk/gtk/plugins/gestures/ trunk/gtk/plugins/gestures/Makefile.am trunk/gtk/plugins/gestures/gestures.c trunk/gtk/plugins/gestures/gstroke-internal.h trunk/gtk/plugins/gestures/gstroke.h trunk/gtk/plugins/gestures/stroke-draw.c trunk/gtk/plugins/gestures/stroke.c trunk/gtk/plugins/gevolution/ trunk/gtk/plugins/gevolution/Makefile.am trunk/gtk/plugins/gevolution/add_buddy_dialog.c trunk/gtk/plugins/gevolution/assoc-buddy.c trunk/gtk/plugins/gevolution/eds-utils.c trunk/gtk/plugins/gevolution/gevo-util.c trunk/gtk/plugins/gevolution/gevolution.c trunk/gtk/plugins/gevolution/gevolution.h trunk/gtk/plugins/gevolution/new_person_dialog.c trunk/gtk/plugins/gtk-signals-test.c trunk/gtk/plugins/history.c trunk/gtk/plugins/iconaway.c trunk/gtk/plugins/log_reader.c trunk/gtk/plugins/mailchk.c trunk/gtk/plugins/musicmessaging/ trunk/gtk/plugins/musicmessaging/Makefile.am trunk/gtk/plugins/musicmessaging/music.png trunk/gtk/plugins/musicmessaging/musicmessaging.c trunk/gtk/plugins/notify.c trunk/gtk/plugins/raw.c trunk/gtk/plugins/relnot.c trunk/gtk/plugins/spellchk.c trunk/gtk/plugins/ticker/ trunk/gtk/plugins/ticker/Makefile.am trunk/gtk/plugins/ticker/Makefile.mingw trunk/gtk/plugins/ticker/gtkticker.c trunk/gtk/plugins/ticker/gtkticker.h trunk/gtk/plugins/ticker/ticker.c trunk/gtk/plugins/timestamp.c trunk/gtk/plugins/timestamp_format.c trunk/gtk/sounds/ trunk/gtk/sounds/Makefile.am trunk/gtk/sounds/alert.wav trunk/gtk/sounds/login.wav trunk/gtk/sounds/logout.wav trunk/gtk/sounds/receive.wav trunk/gtk/sounds/send.wav Removed Paths: ------------- trunk/gtk/pixmaps/Makefile.am trunk/gtk/pixmaps/Makefile.mingw trunk/gtk/pixmaps/about_menu.png trunk/gtk/pixmaps/accounts.png trunk/gtk/pixmaps/away.png trunk/gtk/pixmaps/change-bgcolor-small.png trunk/gtk/pixmaps/change-fgcolor-small.png trunk/gtk/pixmaps/connect.png trunk/gtk/pixmaps/edit.png trunk/gtk/pixmaps/gaim-install.ico trunk/gtk/pixmaps/gaim.ico trunk/gtk/pixmaps/gaim.png trunk/gtk/pixmaps/gaim.svg trunk/gtk/pixmaps/gaim_16.ico trunk/gtk/pixmaps/gaim_4bit_16.ico trunk/gtk/pixmaps/gaim_auth.png trunk/gtk/pixmaps/gaim_away.ico trunk/gtk/pixmaps/gaim_away_16.ico trunk/gtk/pixmaps/gaim_away_4bit_16.ico trunk/gtk/pixmaps/gaim_blank_4bit_16.ico trunk/gtk/pixmaps/gaim_cool.png trunk/gtk/pixmaps/gaim_error.png trunk/gtk/pixmaps/gaim_info.png trunk/gtk/pixmaps/gaim_msgpend_16.ico trunk/gtk/pixmaps/gaim_msgpend_4bit_16.ico trunk/gtk/pixmaps/gaim_msgunread_16.ico trunk/gtk/pixmaps/gaim_msgunread_4bit_16.ico trunk/gtk/pixmaps/gaim_offline.ico trunk/gtk/pixmaps/gaim_offline_16.ico trunk/gtk/pixmaps/gaim_offline_4bit_16.ico trunk/gtk/pixmaps/gaim_question.png trunk/gtk/pixmaps/gaim_warning.png trunk/gtk/pixmaps/info.png trunk/gtk/pixmaps/insert-image-small.png trunk/gtk/pixmaps/insert-link-small.png trunk/gtk/pixmaps/insert-smiley-small.png trunk/gtk/pixmaps/logo.png trunk/gtk/pixmaps/msgpend.png trunk/gtk/pixmaps/msgunread.png trunk/gtk/pixmaps/offline.png trunk/gtk/pixmaps/online.png trunk/gtk/pixmaps/pause.png trunk/gtk/pixmaps/phone.png trunk/gtk/pixmaps/send-im.png trunk/gtk/pixmaps/smileys/ trunk/gtk/pixmaps/status/ trunk/gtk/pixmaps/status-away.png trunk/gtk/pixmaps/status-connect0.png trunk/gtk/pixmaps/status-connect1.png trunk/gtk/pixmaps/status-connect2.png trunk/gtk/pixmaps/status-connect3.png trunk/gtk/pixmaps/status-invisible.png trunk/gtk/pixmaps/status-offline.png trunk/gtk/pixmaps/status-online.png trunk/gtk/pixmaps/status-typing0.png trunk/gtk/pixmaps/status-typing1.png trunk/gtk/pixmaps/status-typing2.png trunk/gtk/pixmaps/status-typing3.png trunk/gtk/pixmaps/stock_connect_16.png trunk/gtk/pixmaps/stock_disconnect_16.png trunk/gtk/pixmaps/tb_drag_arrow_down.xpm trunk/gtk/pixmaps/tb_drag_arrow_left.xpm trunk/gtk/pixmaps/tb_drag_arrow_right.xpm trunk/gtk/pixmaps/tb_drag_arrow_up.xpm trunk/gtk/pixmaps/text_bigger.png trunk/gtk/pixmaps/text_normal.png trunk/gtk/pixmaps/text_smaller.png trunk/gtk/pixmaps/typed.png trunk/gtk/pixmaps/typing.png trunk/gtk/plugins/crazychat/Makefile.am trunk/gtk/plugins/crazychat/QTUtilities.c trunk/gtk/plugins/crazychat/QTUtilities.h trunk/gtk/plugins/crazychat/Utilities.c trunk/gtk/plugins/crazychat/Utilities.h trunk/gtk/plugins/crazychat/camdata.c trunk/gtk/plugins/crazychat/camdata.h trunk/gtk/plugins/crazychat/camproc.c trunk/gtk/plugins/crazychat/camproc.h trunk/gtk/plugins/crazychat/cc_features.c trunk/gtk/plugins/crazychat/cc_gaim_plugin.c trunk/gtk/plugins/crazychat/cc_gtk_gl.c trunk/gtk/plugins/crazychat/cc_gtk_gl.h trunk/gtk/plugins/crazychat/cc_interface.h trunk/gtk/plugins/crazychat/cc_network.c trunk/gtk/plugins/crazychat/cc_network.h trunk/gtk/plugins/crazychat/cc_output.c trunk/gtk/plugins/crazychat/configure.ac trunk/gtk/plugins/crazychat/crazychat.c trunk/gtk/plugins/crazychat/crazychat.h trunk/gtk/plugins/crazychat/dog_lids.c trunk/gtk/plugins/crazychat/dog_lids.h trunk/gtk/plugins/crazychat/doggy.c trunk/gtk/plugins/crazychat/doggy.h trunk/gtk/plugins/crazychat/draw.c trunk/gtk/plugins/crazychat/eye.c trunk/gtk/plugins/crazychat/eye.h trunk/gtk/plugins/crazychat/eyes.c trunk/gtk/plugins/crazychat/eyes.h trunk/gtk/plugins/crazychat/face.c trunk/gtk/plugins/crazychat/face.h trunk/gtk/plugins/crazychat/filter.c trunk/gtk/plugins/crazychat/filter.h trunk/gtk/plugins/crazychat/glm.c trunk/gtk/plugins/crazychat/glm.h trunk/gtk/plugins/crazychat/lids.c trunk/gtk/plugins/crazychat/lids.h trunk/gtk/plugins/crazychat/main.c trunk/gtk/plugins/crazychat/mat_struct.h trunk/gtk/plugins/crazychat/models.c trunk/gtk/plugins/crazychat/models.h trunk/gtk/plugins/crazychat/sharky.c trunk/gtk/plugins/crazychat/sharky.h trunk/gtk/plugins/crazychat/test.h trunk/gtk/plugins/crazychat/util.h trunk/gtk/plugins/docklet/Makefile.am trunk/gtk/plugins/docklet/Makefile.mingw trunk/gtk/plugins/docklet/MinimizeToTray.c trunk/gtk/plugins/docklet/MinimizeToTray.h trunk/gtk/plugins/docklet/docklet-win32.c trunk/gtk/plugins/docklet/docklet-x11.c trunk/gtk/plugins/docklet/docklet.c trunk/gtk/plugins/docklet/docklet.h trunk/gtk/plugins/docklet/eggtrayicon.c trunk/gtk/plugins/docklet/eggtrayicon.h trunk/gtk/plugins/gestures/Makefile.am trunk/gtk/plugins/gestures/gestures.c trunk/gtk/plugins/gestures/gstroke-internal.h trunk/gtk/plugins/gestures/gstroke.h trunk/gtk/plugins/gestures/stroke-draw.c trunk/gtk/plugins/gestures/stroke.c trunk/gtk/plugins/gevolution/Makefile.am trunk/gtk/plugins/gevolution/add_buddy_dialog.c trunk/gtk/plugins/gevolution/assoc-buddy.c trunk/gtk/plugins/gevolution/eds-utils.c trunk/gtk/plugins/gevolution/gevo-util.c trunk/gtk/plugins/gevolution/gevolution.c trunk/gtk/plugins/gevolution/gevolution.h trunk/gtk/plugins/gevolution/new_person_dialog.c trunk/gtk/plugins/musicmessaging/Makefile.am trunk/gtk/plugins/musicmessaging/music.png trunk/gtk/plugins/musicmessaging/musicmessaging.c trunk/gtk/plugins/ticker/Makefile.am trunk/gtk/plugins/ticker/Makefile.mingw trunk/gtk/plugins/ticker/gtkticker.c trunk/gtk/plugins/ticker/gtkticker.h trunk/gtk/plugins/ticker/ticker.c trunk/gtk/sounds/Makefile.am trunk/gtk/sounds/alert.wav trunk/gtk/sounds/login.wav trunk/gtk/sounds/logout.wav trunk/gtk/sounds/receive.wav trunk/gtk/sounds/send.wav Property Changed: ---------------- trunk/gtk/pixmaps/smileys/Makefile.am trunk/gtk/pixmaps/smileys/Makefile.mingw trunk/gtk/pixmaps/status/Makefile.am trunk/gtk/pixmaps/status/Makefile.mingw Added: trunk/gtk/Makefile.am =================================================================== --- trunk/gtk/Makefile.am (rev 0) +++ trunk/gtk/Makefile.am 2006-08-19 00:52:24 UTC (rev 16855) @@ -0,0 +1,181 @@ +EXTRA_DIST = \ + getopt.c \ + getopt.h \ + getopt1.c \ + Makefile.mingw \ + win_gaim.c \ + win32/IdleTracker/Makefile.mingw \ + win32/IdleTracker/idletrack.c \ + win32/IdleTracker/idletrack.h \ + win32/gaimrc.rc \ + win32/global.mak \ + win32/libc_interface.c \ + win32/libc_interface.h \ + win32/libc_internal.h \ + win32/resource.h \ + win32/untar.c \ + win32/untar.h \ + win32/wgaimerror.h \ + win32/win32dep.c \ + win32/win32dep.h \ + win32/wspell.c \ + win32/wspell.h \ + win32/nsis/gaim-header.bmp \ + win32/nsis/gaim-intro.bmp \ + win32/nsis/gaim-plugin.nsh \ + win32/nsis/langmacros.nsh \ + win32/nsis/translations/albanian.nsh \ + win32/nsis/translations/bulgarian.nsh \ + win32/nsis/translations/catalan.nsh \ + win32/nsis/translations/czech.nsh \ + win32/nsis/translations/danish.nsh \ + win32/nsis/translations/dutch.nsh \ + win32/nsis/translations/english.nsh \ + win32/nsis/translations/finnish.nsh \ + win32/nsis/translations/french.nsh \ + win32/nsis/translations/german.nsh \ + win32/nsis/translations/hebrew.nsh \ + win32/nsis/translations/hungarian.nsh \ + win32/nsis/translations/italian.nsh \ + win32/nsis/translations/japanese.nsh \ + win32/nsis/translations/korean.nsh \ + win32/nsis/translations/kurdish.nsh \ + win32/nsis/translations/lithuanian.nsh \ + win32/nsis/translations/norwegian.nsh \ + win32/nsis/translations/polish.nsh \ + win32/nsis/translations/portuguese.nsh \ + win32/nsis/translations/portuguese-br.nsh \ + win32/nsis/translations/romanian.nsh \ + win32/nsis/translations/russian.nsh \ + win32/nsis/translations/serbian-latin.nsh \ + win32/nsis/translations/simp-chinese.nsh \ + win32/nsis/translations/slovak.nsh \ + win32/nsis/translations/slovenian.nsh \ + win32/nsis/translations/spanish.nsh \ + win32/nsis/translations/swedish.nsh \ + win32/nsis/translations/trad-chinese.nsh \ + win32/nsis/translations/vietnamese.nsh + +SUBDIRS = pixmaps plugins sounds + +bin_PROGRAMS = gaim + +gaim_SOURCES = \ + gtkaccount.c \ + gtkblist.c \ + gtkcelllayout.c \ + gtkcellrendererprogress.c \ + gtkcellview.c \ + gtkcellviewmenuitem.c \ + gaimcombobox.c \ + gtkconn.c \ + gtkconv.c \ + gtkdebug.c \ + gtkdialogs.c \ + gtkdnd-hints.c \ + gtkeventloop.c \ + gtkexpander.c \ + gtkft.c \ + gtkidle.c \ + gtkimhtml.c \ + gtkimhtmltoolbar.c \ + gtklog.c \ + gtkmain.c \ + gtkmenutray.c \ + gtknotify.c \ + gtkplugin.c \ + gtkpluginpref.c \ + gtkprefs.c \ + gtkprivacy.c \ + gtkpounce.c \ + gtkrequest.c \ + gtkroomlist.c \ + gtksavedstatuses.c \ + gtksession.c \ + gtksound.c \ + gtksourceiter.c \ + gtkstatusbox.c \ + gaimstock.c \ + gtkthemes.c \ + gtkutils.c \ + gtkwhiteboard.c + +gaim_headers = \ + gtkaccount.h \ + gtkblist.h \ + gtkcelllayout.h \ + gtkcellrendererprogress.h \ + gtkcellview.h \ + gtkcellviewmenuitem.h \ + gtkcellview.h \ + gtkcellviewmenuitem.h \ + gaimcombobox.h \ + gtkconn.h \ + gtkconv.h \ + gtkconvwin.h \ + gtkdebug.h \ + gtkdialogs.h \ + gtkdnd-hints.h \ + gtkeventloop.h \ + gtkexpander.h \ + gtkft.h \ + gtkgaim.h \ + gtkidle.h \ + gtkimhtml.h \ + gtkimhtmltoolbar.h \ + gtklog.h \ + gtkmenutray.h \ + gtknickcolors.h \ + gtknotify.h \ + gtkplugin.h \ + gtkpluginpref.h \ + gtkprefs.h \ + gtkprivacy.h \ + gtkpounce.h \ + gtkrequest.h \ + gtkroomlist.h \ + gtksavedstatuses.h \ + gtksession.h \ + gtksound.h \ + gtksourceiter.h \ + gtkstatusbox.h \ + gaimstock.h \ + gtkthemes.h \ + gtkutils.h \ + gtkwhiteboard.h + +gaimincludedir=$(includedir)/gaim +gaiminclude_HEADERS = \ + $(gaim_headers) + + +gaim_DEPENDENCIES = @LIBOBJS@ $(STATIC_LINK_LIBS) $(MS_LIBS) +gaim_LDFLAGS = -export-dynamic +gaim_LDADD = \ + @LIBOBJS@ \ + $(DBUS_LIBS) \ + $(GSTREAMER_LIBS) \ + $(STATIC_LINK_LIBS) \ + $(XSS_LIBS) \ + $(SM_LIBS) \ + $(INTLLIBS) \ + $(GTKSPELL_LIBS) \ + $(STARTUP_NOTIFICATION_LIBS) \ + $(LIBXML_LIBS) \ + $(GTK_LIBS) \ + -L$(top_srcdir)/core -lgaim + +AM_CPPFLAGS = \ + -DBR_PTHREADS=0 \ + -DDATADIR=\"$(datadir)\" \ + -DLIBDIR=\"$(libdir)/gaim/\" \ + -DLOCALEDIR=\"$(datadir)/locale\" \ + -DSYSCONFDIR=\"$(sysconfdir)\" \ + -I$(top_srcdir)/core/ \ + $(GSTREAMER_CFLAGS) \ + $(DEBUG_CFLAGS) \ + $(GTK_CFLAGS) \ + $(DBUS_CFLAGS) \ + $(GTKSPELL_CFLAGS) \ + $(STARTUP_NOTIFICATION_CFLAGS) \ + $(LIBXML_CFLAGS) Property changes on: trunk/gtk/Makefile.am ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Copied: trunk/gtk/gaimcombobox.c (from rev 16843, trunk/src/gtkcombobox.c) =================================================================== --- trunk/gtk/gaimcombobox.c (rev 0) +++ trunk/gtk/gaimcombobox.c 2006-08-19 00:52:24 UTC (rev 16855) @@ -0,0 +1,3733 @@ +/* gaimcombobox.c + * Copyright (C) 2002, 2003 Kristian Rietveld <kr...@gt...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* +#include <config.h> +*/ +#include <gtk/gtkversion.h> +#if !GTK_CHECK_VERSION(2,4,0) +#include "gaimcombobox.h" + +#include <gtk/gtkarrow.h> +#include <gtk/gtkbindings.h> +#include "gtkcelllayout.h" +#include <gtk/gtkcellrenderertext.h> +#include "gtkcellview.h" +#include "gtkcellviewmenuitem.h" +#include <gtk/gtkeventbox.h> +#include <gtk/gtkframe.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkliststore.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtktogglebutton.h> +#include <gtk/gtktreeselection.h> +/* +#include <gtk/gtktreeprivate.h> +*/ +#include <gtk/gtkvseparator.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkversion.h> + +#include <gdk/gdkkeysyms.h> + +#include <gobject/gvaluecollector.h> + +#include <string.h> +#include <stdarg.h> + +#define P_(x) (x) + +/* WELCOME, to THE house of evil code */ + +typedef struct _ComboCellInfo ComboCellInfo; +struct _ComboCellInfo +{ + GtkCellRenderer *cell; + GSList *attributes; + + GtkCellLayoutDataFunc func; + gpointer func_data; + GDestroyNotify destroy; + + guint expand : 1; + guint pack : 1; +}; + +struct _GtkComboBoxPrivate +{ + GtkTreeModel *model; + + gint col_column; + gint row_column; + + gint wrap_width; + + gint active_item; + + GtkWidget *tree_view; + GtkTreeViewColumn *column; + + GtkWidget *cell_view; + GtkWidget *cell_view_frame; + + GtkWidget *button; + GtkWidget *box; + GtkWidget *arrow; + GtkWidget *separator; + + GtkWidget *popup_widget; + GtkWidget *popup_window; + GtkWidget *popup_frame; + + guint inserted_id; + guint deleted_id; + guint reordered_id; + guint changed_id; + + gint width; + GSList *cells; + + guint popup_in_progress : 1; + guint destroying : 1; +}; + +/* While debugging this evil code, I have learned that + * there are actually 4 modes to this widget, which can + * be characterized as follows + * + * 1) menu mode, no child added + * + * tree_view -> NULL + * cell_view -> GtkCellView, regular child + * cell_view_frame -> NULL + * button -> GtkToggleButton set_parent to combo + * box -> child of button + * arrow -> child of box + * separator -> child of box + * popup_widget -> GtkMenu + * popup_window -> NULL + * popup_frame -> NULL + * + * 2) menu mode, child added + * + * tree_view -> NULL + * cell_view -> NULL + * cell_view_frame -> NULL + * button -> GtkToggleButton set_parent to combo + * box -> NULL + * arrow -> GtkArrow, child of button + * separator -> NULL + * popup_widget -> GtkMenu + * popup_window -> NULL + * popup_frame -> NULL + * + * 3) list mode, no child added + * + * tree_view -> GtkTreeView, child of popup_frame + * cell_view -> GtkCellView, regular child + * cell_view_frame -> GtkFrame, set parent to combo + * button -> GtkToggleButton, set_parent to combo + * box -> NULL + * arrow -> GtkArrow, child of button + * separator -> NULL + * popup_widget -> tree_view + * popup_window -> GtkWindow + * popup_frame -> GtkFrame, child of popup_window + * + * 4) list mode, child added + * + * tree_view -> GtkTreeView, child of popup_frame + * cell_view -> NULL + * cell_view_frame -> NULL + * button -> GtkToggleButton, set_parent to combo + * box -> NULL + * arrow -> GtkArrow, child of button + * separator -> NULL + * popup_widget -> tree_view + * popup_window -> GtkWindow + * popup_frame -> GtkFrame, child of popup_window + * + */ + +enum { + CHANGED, + LAST_SIGNAL +}; + +enum { + PROP_0, + PROP_MODEL, + PROP_WRAP_WIDTH, + PROP_ROW_SPAN_COLUMN, + PROP_COLUMN_SPAN_COLUMN, + PROP_ACTIVE +}; + +static GtkBinClass *parent_class = NULL; +static guint combo_box_signals[LAST_SIGNAL] = {0,}; + +#define BONUS_PADDING 4 + + +/* common */ +static void gtk_combo_box_class_init (GtkComboBoxClass *klass); +static void gtk_combo_box_cell_layout_init (GtkCellLayoutIface *iface); +static void gtk_combo_box_init (GtkComboBox *combo_box); +static void gtk_combo_box_finalize (GObject *object); +static void gtk_combo_box_destroy (GtkObject *object); + +static void gtk_combo_box_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *spec); +static void gtk_combo_box_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *spec); + +static void gtk_combo_box_state_changed (GtkWidget *widget, + GtkStateType previous); +static void gtk_combo_box_style_set (GtkWidget *widget, + GtkStyle *previous); +static void gtk_combo_box_button_toggled (GtkWidget *widget, + gpointer data); +static void gtk_combo_box_add (GtkContainer *container, + GtkWidget *widget); +static void gtk_combo_box_remove (GtkContainer *container, + GtkWidget *widget); + +static ComboCellInfo *gtk_combo_box_get_cell_info (GtkComboBox *combo_box, + GtkCellRenderer *cell); + +static void gtk_combo_box_menu_show (GtkWidget *menu, + gpointer user_data); +static void gtk_combo_box_menu_hide (GtkWidget *menu, + gpointer user_data); + +static void gtk_combo_box_set_popup_widget (GtkComboBox *combo_box, + GtkWidget *popup); +#if GTK_CHECK_VERSION(2,2,0) +static void gtk_combo_box_menu_position_below (GtkMenu *menu, + gint *x, + gint *y, + gint *push_in, + gpointer user_data); +static void gtk_combo_box_menu_position_over (GtkMenu *menu, + gint *x, + gint *y, + gint *push_in, + gpointer user_data); +static void gtk_combo_box_menu_position (GtkMenu *menu, + gint *x, + gint *y, + gint *push_in, + gpointer user_data); +#endif + +static gint gtk_combo_box_calc_requested_width (GtkComboBox *combo_box, + GtkTreePath *path); +static void gtk_combo_box_remeasure (GtkComboBox *combo_box); + +static void gtk_combo_box_unset_model (GtkComboBox *combo_box); + +static void gtk_combo_box_size_request (GtkWidget *widget, + GtkRequisition *requisition); +static void gtk_combo_box_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); +static void gtk_combo_box_forall (GtkContainer *container, + gboolean include_internals, + GtkCallback callback, + gpointer callback_data); +static gboolean gtk_combo_box_expose_event (GtkWidget *widget, + GdkEventExpose *event); +static gboolean gtk_combo_box_scroll_event (GtkWidget *widget, + GdkEventScroll *event); +static void gtk_combo_box_set_active_internal (GtkComboBox *combo_box, + gint index); +static gboolean gtk_combo_box_key_press (GtkWidget *widget, + GdkEventKey *event, + gpointer data); + +/* listening to the model */ +static void gtk_combo_box_model_row_inserted (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data); +static void gtk_combo_box_model_row_deleted (GtkTreeModel *model, + GtkTreePath *path, + gpointer user_data); +static void gtk_combo_box_model_rows_reordered (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gint *new_order, + gpointer user_data); +static void gtk_combo_box_model_row_changed (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data); + +/* list */ +static void gtk_combo_box_list_position (GtkComboBox *combo_box, + gint *x, + gint *y, + gint *width, + gint *height); + +static void gtk_combo_box_list_setup (GtkComboBox *combo_box); +static void gtk_combo_box_list_destroy (GtkComboBox *combo_box); + +static void gtk_combo_box_list_remove_grabs (GtkComboBox *combo_box); + +static gboolean gtk_combo_box_list_button_released (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static gboolean gtk_combo_box_list_key_press (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static gboolean gtk_combo_box_list_button_pressed (GtkWidget *widget, + GdkEventButton *event, + gpointer data); + +static void gtk_combo_box_list_row_changed (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data); + +/* menu */ +static void gtk_combo_box_menu_setup (GtkComboBox *combo_box, + gboolean add_children); +static void gtk_combo_box_menu_fill (GtkComboBox *combo_box); +static void gtk_combo_box_menu_destroy (GtkComboBox *combo_box); + +static void gtk_combo_box_item_get_size (GtkComboBox *combo_box, + gint index, + gint *cols, + gint *rows); +static void gtk_combo_box_relayout_item (GtkComboBox *combo_box, + gint index); +static void gtk_combo_box_relayout (GtkComboBox *combo_box); + +static gboolean gtk_combo_box_menu_button_press (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data); +static void gtk_combo_box_menu_item_activate (GtkWidget *item, + gpointer user_data); +static void gtk_combo_box_menu_row_inserted (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data); +static void gtk_combo_box_menu_row_deleted (GtkTreeModel *model, + GtkTreePath *path, + gpointer user_data); +static void gtk_combo_box_menu_rows_reordered (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gint *new_order, + gpointer user_data); +static void gtk_combo_box_menu_row_changed (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data); +static gboolean gtk_combo_box_menu_key_press (GtkWidget *widget, + GdkEventKey *event, + gpointer data); + +/* cell layout */ +static void gtk_combo_box_cell_layout_pack_start (GtkCellLayout *layout, + GtkCellRenderer *cell, + gboolean expand); +static void gtk_combo_box_cell_layout_pack_end (GtkCellLayout *layout, + GtkCellRenderer *cell, + gboolean expand); +static void gtk_combo_box_cell_layout_clear (GtkCellLayout *layout); +static void gtk_combo_box_cell_layout_add_attribute (GtkCellLayout *layout, + GtkCellRenderer *cell, + const gchar *attribute, + gint column); +static void gtk_combo_box_cell_layout_set_cell_data_func (GtkCellLayout *layout, + GtkCellRenderer *cell, + GtkCellLayoutDataFunc func, + gpointer func_data, + GDestroyNotify destroy); +static void gtk_combo_box_cell_layout_clear_attributes (GtkCellLayout *layout, + GtkCellRenderer *cell); +static void gtk_combo_box_cell_layout_reorder (GtkCellLayout *layout, + GtkCellRenderer *cell, + gint position); +static gboolean gtk_combo_box_mnemonic_activate (GtkWidget *widget, + gboolean group_cycling); + +static void cell_view_sync_cells (GtkComboBox *combo_box, + GtkCellView *cell_view); + +#if !GTK_CHECK_VERSION(2,4,0) +static void gtk_menu_attach (GtkMenu *menu, + GtkWidget *child, + guint left_attach, + guint right_attach, + guint top_attach, + guint bottom_attach); +#endif + +GType +gtk_combo_box_get_type (void) +{ + static GType combo_box_type = 0; + + if (!combo_box_type) + { + static const GTypeInfo combo_box_info = + { + sizeof (GtkComboBoxClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) gtk_combo_box_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GtkComboBox), + 0, + (GInstanceInitFunc) gtk_combo_box_init + }; + + static const GInterfaceInfo cell_layout_info = + { + (GInterfaceInitFunc) gtk_combo_box_cell_layout_init, + NULL, + NULL + }; + + combo_box_type = g_type_register_static (GTK_TYPE_BIN, + "GaimGtkComboBox", + &combo_box_info, + 0); + + g_type_add_interface_static (combo_box_type, + GTK_TYPE_CELL_LAYOUT, + &cell_layout_info); + } + + return combo_box_type; +} + +/* common */ +static void +gtk_combo_box_class_init (GtkComboBoxClass *klass) +{ + GObjectClass *object_class; + GtkBindingSet *binding_set; + GtkObjectClass *gtk_object_class; + GtkContainerClass *container_class; + GtkWidgetClass *widget_class; + + binding_set = gtk_binding_set_by_class (klass); + + container_class = (GtkContainerClass *)klass; + container_class->forall = gtk_combo_box_forall; + container_class->add = gtk_combo_box_add; + container_class->remove = gtk_combo_box_remove; + + widget_class = (GtkWidgetClass *)klass; + widget_class->size_allocate = gtk_combo_box_size_allocate; + widget_class->size_request = gtk_combo_box_size_request; + widget_class->expose_event = gtk_combo_box_expose_event; + widget_class->scroll_event = gtk_combo_box_scroll_event; + widget_class->mnemonic_activate = gtk_combo_box_mnemonic_activate; + widget_class->style_set = gtk_combo_box_style_set; + widget_class->state_changed = gtk_combo_box_state_changed; + + gtk_object_class = (GtkObjectClass *)klass; + gtk_object_class->destroy = gtk_combo_box_destroy; + + object_class = (GObjectClass *)klass; + object_class->finalize = gtk_combo_box_finalize; + object_class->set_property = gtk_combo_box_set_property; + object_class->get_property = gtk_combo_box_get_property; + + parent_class = g_type_class_peek_parent (klass); + + /* signals */ + combo_box_signals[CHANGED] = + g_signal_new ("changed", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkComboBoxClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + /* properties */ + g_object_class_install_property (object_class, + PROP_MODEL, + g_param_spec_object ("model", + P_("ComboBox model"), + P_("The model for the combo box"), + GTK_TYPE_TREE_MODEL, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_WRAP_WIDTH, + g_param_spec_int ("wrap_width", + P_("Wrap width"), + P_("Wrap width for layouting the items in a grid"), + 0, + G_MAXINT, + 0, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_ROW_SPAN_COLUMN, + g_param_spec_int ("row_span_column", + P_("Row span column"), + P_("TreeModel column containing the row span values"), + 0, + G_MAXINT, + 0, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_COLUMN_SPAN_COLUMN, + g_param_spec_int ("column_span_column", + P_("Column span column"), + + P_("TreeModel column containing the column span values"), + 0, + G_MAXINT, + 0, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_ACTIVE, + g_param_spec_int ("active", + P_("Active item"), + P_("The item which is currently active"), + -1, + G_MAXINT, + -1, + G_PARAM_READWRITE)); + + gtk_widget_class_install_style_property (widget_class, + g_param_spec_boolean ("appears-as-list", + P_("Appears as list"), + P_("Whether combobox dropdowns should look like lists rather than menus"), + FALSE, + G_PARAM_READABLE)); +} + +static void +gtk_combo_box_cell_layout_init (GtkCellLayoutIface *iface) +{ + iface->pack_start = gtk_combo_box_cell_layout_pack_start; + iface->pack_end = gtk_combo_box_cell_layout_pack_end; + iface->clear = gtk_combo_box_cell_layout_clear; + iface->add_attribute = gtk_combo_box_cell_layout_add_attribute; + iface->set_cell_data_func = gtk_combo_box_cell_layout_set_cell_data_func; + iface->clear_attributes = gtk_combo_box_cell_layout_clear_attributes; + iface->reorder = gtk_combo_box_cell_layout_reorder; +} + +static void +gtk_combo_box_init (GtkComboBox *combo_box) +{ + combo_box->priv = g_new0(GtkComboBoxPrivate,1); + + combo_box->priv->cell_view = gtk_cell_view_new (); + gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (combo_box)); + GTK_BIN (combo_box)->child = combo_box->priv->cell_view; + gtk_widget_show (combo_box->priv->cell_view); + + combo_box->priv->width = 0; + combo_box->priv->wrap_width = 0; + + combo_box->priv->active_item = -1; + combo_box->priv->col_column = -1; + combo_box->priv->row_column = -1; +} + +static void +gtk_combo_box_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (object); + + switch (prop_id) + { + case PROP_MODEL: + gtk_combo_box_set_model (combo_box, g_value_get_object (value)); + break; + + case PROP_WRAP_WIDTH: + gtk_combo_box_set_wrap_width (combo_box, g_value_get_int (value)); + break; + + case PROP_ROW_SPAN_COLUMN: + gtk_combo_box_set_row_span_column (combo_box, g_value_get_int (value)); + break; + + case PROP_COLUMN_SPAN_COLUMN: + gtk_combo_box_set_column_span_column (combo_box, g_value_get_int (value)); + break; + + case PROP_ACTIVE: + gtk_combo_box_set_active (combo_box, g_value_get_int (value)); + break; + + default: + break; + } +} + +static void +gtk_combo_box_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (object); + + switch (prop_id) + { + case PROP_MODEL: + g_value_set_object (value, combo_box->priv->model); + break; + + case PROP_WRAP_WIDTH: + g_value_set_int (value, combo_box->priv->wrap_width); + break; + + case PROP_ROW_SPAN_COLUMN: + g_value_set_int (value, combo_box->priv->row_column); + break; + + case PROP_COLUMN_SPAN_COLUMN: + g_value_set_int (value, combo_box->priv->col_column); + break; + + case PROP_ACTIVE: + g_value_set_int (value, gtk_combo_box_get_active (combo_box)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_combo_box_state_changed (GtkWidget *widget, + GtkStateType previous) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (widget); + + if (GTK_WIDGET_REALIZED (widget)) + { + if (combo_box->priv->tree_view && combo_box->priv->cell_view) + gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), + &widget->style->base[GTK_WIDGET_STATE (widget)]); + } + + gtk_widget_queue_draw (widget); +} + +static void +gtk_combo_box_check_appearance (GtkComboBox *combo_box) +{ + gboolean appears_as_list; + + /* if wrap_width > 0, then we are in grid-mode and forced to use + * unix style + */ + if (combo_box->priv->wrap_width) + appears_as_list = FALSE; + else + gtk_widget_style_get (GTK_WIDGET (combo_box), + "appears-as-list", &appears_as_list, + NULL); + + if (appears_as_list) + { + /* Destroy all the menu mode widgets, if they exist. */ + if (GTK_IS_MENU (combo_box->priv->popup_widget)) + gtk_combo_box_menu_destroy (combo_box); + + /* Create the list mode widgets, if they don't already exist. */ + if (!GTK_IS_TREE_VIEW (combo_box->priv->tree_view)) + gtk_combo_box_list_setup (combo_box); + } + else + { + /* Destroy all the list mode widgets, if they exist. */ + if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view)) + gtk_combo_box_list_destroy (combo_box); + + /* Create the menu mode widgets, if they don't already exist. */ + if (!GTK_IS_MENU (combo_box->priv->popup_widget)) + gtk_combo_box_menu_setup (combo_box, TRUE); + } +} + +static void +gtk_combo_box_style_set (GtkWidget *widget, + GtkStyle *previous) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (widget); + + gtk_combo_box_check_appearance (combo_box); + + if (combo_box->priv->tree_view && combo_box->priv->cell_view) + gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view), + &widget->style->base[GTK_WIDGET_STATE (widget)]); +} + +static void +gtk_combo_box_button_toggled (GtkWidget *widget, + gpointer data) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (data); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + { + if (!combo_box->priv->popup_in_progress) + gtk_combo_box_popup (combo_box); + } + else + gtk_combo_box_popdown (combo_box); +} + +static void +gtk_combo_box_add (GtkContainer *container, + GtkWidget *widget) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (container); + + if (combo_box->priv->cell_view && combo_box->priv->cell_view->parent) + { + gtk_widget_unparent (combo_box->priv->cell_view); + GTK_BIN (container)->child = NULL; + gtk_widget_queue_resize (GTK_WIDGET (container)); + } + + gtk_widget_set_parent (widget, GTK_WIDGET (container)); + GTK_BIN (container)->child = widget; + + if (combo_box->priv->cell_view && + widget != combo_box->priv->cell_view) + { + /* since the cell_view was unparented, it's gone now */ + combo_box->priv->cell_view = NULL; + + if (!combo_box->priv->tree_view && combo_box->priv->separator) + { + gtk_container_remove (GTK_CONTAINER (combo_box->priv->separator->parent), + combo_box->priv->separator); + combo_box->priv->separator = NULL; + + gtk_widget_queue_resize (GTK_WIDGET (container)); + } + else if (combo_box->priv->cell_view_frame) + { + gtk_widget_unparent (combo_box->priv->cell_view_frame); + combo_box->priv->cell_view_frame = NULL; + } + } +} + +static void +gtk_combo_box_remove (GtkContainer *container, + GtkWidget *widget) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (container); + gboolean appears_as_list; + + gtk_widget_unparent (widget); + GTK_BIN (container)->child = NULL; + + if (combo_box->priv->destroying) + return; + + gtk_widget_queue_resize (GTK_WIDGET (container)); + + if (!combo_box->priv->tree_view) + appears_as_list = FALSE; + else + appears_as_list = TRUE; + + if (appears_as_list) + gtk_combo_box_list_destroy (combo_box); + else if (GTK_IS_MENU (combo_box->priv->popup_widget)) + { + gtk_combo_box_menu_destroy (combo_box); + gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget)); + combo_box->priv->popup_widget = NULL; + } + + if (!combo_box->priv->cell_view) + { + combo_box->priv->cell_view = gtk_cell_view_new (); + gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (container)); + GTK_BIN (container)->child = combo_box->priv->cell_view; + + gtk_widget_show (combo_box->priv->cell_view); + gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view), + combo_box->priv->model); + cell_view_sync_cells (combo_box, GTK_CELL_VIEW (combo_box->priv->cell_view)); + } + + + if (appears_as_list) + gtk_combo_box_list_setup (combo_box); + else + gtk_combo_box_menu_setup (combo_box, TRUE); + + gtk_combo_box_set_active_internal (combo_box, combo_box->priv->active_item); +} + +static ComboCellInfo * +gtk_combo_box_get_cell_info (GtkComboBox *combo_box, + GtkCellRenderer *cell) +{ + GSList *i; + + for (i = combo_box->priv->cells; i; i = i->next) + { + ComboCellInfo *info = (ComboCellInfo *)i->data; + + if (info && info->cell == cell) + return info; + } + + return NULL; +} + +static void +gtk_combo_box_menu_show (GtkWidget *menu, + gpointer user_data) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (user_data); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button), + TRUE); + combo_box->priv->popup_in_progress = FALSE; +} + +static void +gtk_combo_box_menu_hide (GtkWidget *menu, + gpointer user_data) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (user_data); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button), + FALSE); +} + +static void +gtk_combo_box_detacher (GtkWidget *widget, + GtkMenu *menu) +{ + GtkComboBox *combo_box; + + g_return_if_fail (GTK_IS_COMBO_BOX (widget)); + + combo_box = GTK_COMBO_BOX (widget); + g_return_if_fail (combo_box->priv->popup_widget == (GtkWidget*) menu); + + g_signal_handlers_disconnect_by_func (menu, + gtk_combo_box_menu_show, + combo_box); + g_signal_handlers_disconnect_by_func (menu, + gtk_combo_box_menu_hide, + combo_box); + + combo_box->priv->popup_widget = NULL; +} + +static void +gtk_combo_box_set_popup_widget (GtkComboBox *combo_box, + GtkWidget *popup) +{ + if (GTK_IS_MENU (combo_box->priv->popup_widget)) + { + gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget)); + combo_box->priv->popup_widget = NULL; + } + else if (combo_box->priv->popup_widget) + { + gtk_container_remove (GTK_CONTAINER (combo_box->priv->popup_frame), + combo_box->priv->popup_widget); + g_object_unref (G_OBJECT (combo_box->priv->popup_widget)); + combo_box->priv->popup_widget = NULL; + } + + if (GTK_IS_MENU (popup)) + { + if (combo_box->priv->popup_window) + { + gtk_widget_destroy (combo_box->priv->popup_window); + combo_box->priv->popup_window = NULL; + combo_box->priv->popup_frame = NULL; + } + + combo_box->priv->popup_widget = popup; + + g_signal_connect (popup, "show", + G_CALLBACK (gtk_combo_box_menu_show), combo_box); + g_signal_connect (popup, "hide", + G_CALLBACK (gtk_combo_box_menu_hide), combo_box); + + gtk_menu_attach_to_widget (GTK_MENU (popup), + GTK_WIDGET (combo_box), + gtk_combo_box_detacher); + } + else + { + if (!combo_box->priv->popup_window) + { + combo_box->priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP); + gtk_window_set_resizable (GTK_WINDOW (combo_box->priv->popup_window), FALSE); +#if GTK_CHECK_VERSION(2,2,0) + gtk_window_set_screen (GTK_WINDOW (combo_box->priv->popup_window), + gtk_widget_get_screen (GTK_WIDGET (combo_box))); +#endif + + combo_box->priv->popup_frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->popup_frame), + GTK_SHADOW_ETCHED_IN); + gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_window), + combo_box->priv->popup_frame); + + gtk_widget_show (combo_box->priv->popup_frame); + } + + gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_frame), + popup); + gtk_widget_show (popup); + g_object_ref (G_OBJECT (popup)); + combo_box->priv->popup_widget = popup; + } +} + +#if GTK_CHECK_VERSION(2,2,0) +static void +gtk_combo_box_menu_position_below (GtkMenu *menu, + gint *x, + gint *y, + gint *push_in, + gpointer user_data) +{ + GtkComboBox *combo_box = GTK_COMBO_BOX (user_data); + gint sx, sy; + GtkWidget *child; + GtkRequisition req; + GdkScreen *screen; + gint monitor_num; + GdkRectangle monitor; + + /* FIXME: is using the size request here broken? */ + child = GTK_BIN (combo_box)->child; + + gdk_window_get_origin (child->window, &sx, &sy); + + if (GTK_WIDGET_NO_WINDOW (child)) + { + sx += child->allocation.x; + sy += child->allocation.y; + } + + gtk_widget_size_request (GTK_WIDGET (menu), &req); + + if (gtk_widget_get_direction (GTK_WIDGET (combo_box)) == GTK_TEXT_DIR_LTR) + *x = sx; + else + *x = sx + child->allocation.width - req.width; + *y = sy; + + screen = gtk_widget_get_screen (GTK_WIDGET (combo_box)); + monitor_num = gdk_screen_get_monitor_at_window (screen, + GTK_WIDGET (combo_box)->window); + gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); + + if (*x < monitor.x) + *x = monitor.x; + else if (*x + req.width > monitor.x + monitor.width) + *x = monitor.x + monitor.width - req.width; + + if (monitor.y + monitor.height - *y - child->allocation.height >= req.height) + *y += child->allocation.height; + else if (*y - monitor.y >= req.height) + *y -= req.height; + else if (monitor.y + monitor.height - *y - child->allocation.height > *y - monitor.y) + *y += child->allocation.height; + else + *y -= req.height; + + *push_in = FALSE; +} + +static void +gtk_combo_box_menu_position_over (GtkMenu *menu, + gint *x, + gint *y, + gboolean *push_in, + gpointer user_data) +{ + GtkComboBox *combo_box; + GtkWidget *active; + GtkWidget *child; + GtkWidget *widget; + GtkRequisition requisition; + GList *children; + gint screen_width; + gint menu_xpos; + gint menu_ypos; + gint menu_width; + + g_return_if_fail (GTK_IS_COMBO_BOX (user_data)); + + combo_box = GTK_COMBO_BOX (user_data); + widget = GTK_WIDGET (combo_box); + + gtk_widget_get_child_requisition (GTK_WIDGET (menu), &requisition); + menu_width = requisition.width; + + active = gtk_menu_get_active (GTK_MENU (combo_box->priv->popup_widget)); + gdk_window_get_origin (widget->window, &menu_xpos, &menu_ypos); + + menu_xpos += widget->allocation.x; + menu_ypos += widget->allocation.y + widget->allocation.height / 2 - 2; + + if (active != NULL) + { + gtk_widget_get_child_requisition (active, &requisition); + menu_ypos -= requisition.height / 2; + } + + children = GTK_MENU_SHELL (combo_... [truncated message content] |
From: <ev...@us...> - 2006-08-19 01:17:39
|
Revision: 16856 Author: evands Date: 2006-08-18 18:13:25 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16856&view=rev Log Message: ----------- ** Part 2 of a 4 part commit ** Restructured the tree and the build files for the core/UI split. libgaim is now built as a library against which gtkgaim and gntgaim link and can be built separately from them by configuring with them disable d (--disable-gtkgaim and --disable-gntgaim). Each of the three source trees (gtk, console, and core) has its own plugins folder. This works nicely on my system; hopefully it won't cause too much chaos for others. If you have local changes, an easy way to merge them to the new layout should be along the lines of svn diff -r version_before_move > myChanges.diff patch -p1 < myChanges.diff where svn diff is done from the gaim checkout root but patch is done from gtk or core (or both). This changeset combines work by Sadrul Chowdhury, Gary Kramlich (grim), and me. Known issues: * On my system, at least, something's not quite right with the gtkgaim build process; it imports gtkgaim.h (as can be seen by adding a #warning) but <gtk/gtk.h> doesn't seem to be used. The GTK_STOCK_XXX defi nes claim to be undeclared. I was going to make this work before committing, but I strongly suspect someone with more autotools experience will be able to fix it easily whereas I've already glared at it for a n hour. * The gnt console UI depends on libgnt, which is not yet automatically built. Either autogen.sh && make && make install libgnt (in console/libgnt) or configure with --disable-gnt for now. * The Windows build process has not been touched yet so still needs updating. * There's an stray "rm: core: is a directory" warning after autogen.sh is compl te. I'm not sure where that's coming from. Modified Paths: -------------- trunk/core/plugins/mono/loader/Makefile.am trunk/core/protocols/bonjour/Makefile.am trunk/core/protocols/gg/Makefile.am trunk/core/protocols/irc/Makefile.am trunk/core/protocols/jabber/Makefile.am trunk/core/protocols/msn/Makefile.am trunk/core/protocols/novell/Makefile.am trunk/core/protocols/oscar/Makefile.am trunk/core/protocols/qq/Makefile.am trunk/core/protocols/sametime/Makefile.am trunk/core/protocols/silc/Makefile.am trunk/core/protocols/simple/Makefile.am trunk/core/protocols/toc/Makefile.am trunk/core/protocols/yahoo/Makefile.am trunk/core/protocols/zephyr/Makefile.am trunk/core/protocols/zephyr/zephyr.c trunk/core/protocols/zephyr/zephyr.h Added Paths: ----------- trunk/core/ trunk/core/Makefile.am trunk/core/account.c trunk/core/account.h trunk/core/accountopt.c trunk/core/accountopt.h trunk/core/blist.c trunk/core/blist.h trunk/core/buddyicon.c trunk/core/buddyicon.h trunk/core/cipher.c trunk/core/cipher.h trunk/core/circbuffer.c trunk/core/circbuffer.h trunk/core/cmds.c trunk/core/cmds.h trunk/core/connection.c trunk/core/connection.h trunk/core/conversation.c trunk/core/conversation.h trunk/core/core.c trunk/core/core.h trunk/core/dbus-analyze-functions.py trunk/core/dbus-analyze-types.py trunk/core/dbus-bindings.h trunk/core/dbus-define-api.h trunk/core/dbus-gaim.h trunk/core/dbus-gaim.service trunk/core/dbus-maybe.h trunk/core/dbus-server.c trunk/core/dbus-server.h trunk/core/dbus-useful.c trunk/core/dbus-useful.h trunk/core/debug.c trunk/core/debug.h trunk/core/desktopitem.c trunk/core/desktopitem.h trunk/core/dnsquery.c trunk/core/dnsquery.h trunk/core/dnssrv.c trunk/core/dnssrv.h trunk/core/eventloop.c trunk/core/eventloop.h trunk/core/ft.c trunk/core/ft.h trunk/core/gaim-client-example.c trunk/core/gaim-client.c trunk/core/gaim-client.h trunk/core/gaim-notifications-example trunk/core/gaim-remote trunk/core/gaim-send trunk/core/gaim-send-async trunk/core/gaim.h trunk/core/getopt.c trunk/core/getopt.h trunk/core/getopt1.c trunk/core/idle.c trunk/core/idle.h trunk/core/imgstore.c trunk/core/imgstore.h trunk/core/internal.h trunk/core/log.c trunk/core/log.h trunk/core/mime.c trunk/core/mime.h trunk/core/network.c trunk/core/network.h trunk/core/notify.c trunk/core/notify.h trunk/core/ntlm.c trunk/core/ntlm.h trunk/core/plugin.c trunk/core/plugin.h trunk/core/pluginpref.c trunk/core/pluginpref.h trunk/core/plugins/ trunk/core/plugins/Makefile.am trunk/core/plugins/ciphertest.c trunk/core/plugins/codeinline.c trunk/core/plugins/dbus-buddyicons-example.py trunk/core/plugins/dbus-example.c trunk/core/plugins/filectl.c trunk/core/plugins/fortuneprofile.pl trunk/core/plugins/gaim.pl trunk/core/plugins/idle.c trunk/core/plugins/ipc-test-client.c trunk/core/plugins/ipc-test-server.c trunk/core/plugins/mono/ trunk/core/plugins/mono/BooPlugin.boo trunk/core/plugins/mono/GetBuddyBack.cs trunk/core/plugins/mono/MPlugin.cs trunk/core/plugins/mono/Makefile.am trunk/core/plugins/mono/api/ trunk/core/plugins/mono/loader/ trunk/core/plugins/perl/ trunk/core/plugins/perl/Makefile.am trunk/core/plugins/perl/Makefile.mingw trunk/core/plugins/perl/common/ trunk/core/plugins/perl/libgaimperl.c trunk/core/plugins/perl/perl-common.c trunk/core/plugins/perl/perl-common.h trunk/core/plugins/perl/perl-handlers.c trunk/core/plugins/perl/perl-handlers.h trunk/core/plugins/perl/perl.c trunk/core/plugins/perl/scripts/ trunk/core/plugins/pluginpref_example.c trunk/core/plugins/psychic.c trunk/core/plugins/signals-test.c trunk/core/plugins/simple.c trunk/core/plugins/ssl/ trunk/core/plugins/ssl/Makefile.am trunk/core/plugins/ssl/Makefile.mingw trunk/core/plugins/ssl/ssl-gnutls.c trunk/core/plugins/ssl/ssl-nss.c trunk/core/plugins/ssl/ssl.c trunk/core/plugins/statenotify.c trunk/core/plugins/tcl/ trunk/core/plugins/tcl/Makefile.am trunk/core/plugins/tcl/Makefile.mingw trunk/core/plugins/tcl/signal-test.tcl trunk/core/plugins/tcl/tcl.c trunk/core/plugins/tcl/tcl_cmd.c trunk/core/plugins/tcl/tcl_cmds.c trunk/core/plugins/tcl/tcl_gaim.h trunk/core/plugins/tcl/tcl_glib.c trunk/core/plugins/tcl/tcl_glib.h trunk/core/plugins/tcl/tcl_ref.c trunk/core/plugins/tcl/tcl_signals.c trunk/core/plugins/test.pl trunk/core/pounce.c trunk/core/pounce.h trunk/core/prefix.c trunk/core/prefix.h trunk/core/prefs.c trunk/core/prefs.h trunk/core/privacy.c trunk/core/privacy.h trunk/core/protocols/ trunk/core/protocols/Makefile.am trunk/core/protocols/bonjour/ trunk/core/protocols/gg/ trunk/core/protocols/irc/ trunk/core/protocols/jabber/ trunk/core/protocols/msn/ trunk/core/protocols/novell/ trunk/core/protocols/oscar/ trunk/core/protocols/qq/ trunk/core/protocols/sametime/ trunk/core/protocols/silc/ trunk/core/protocols/simple/ trunk/core/protocols/toc/ trunk/core/protocols/yahoo/ trunk/core/protocols/zephyr/ trunk/core/proxy.c trunk/core/proxy.h trunk/core/prpl.c trunk/core/prpl.h trunk/core/request.c trunk/core/request.h trunk/core/roomlist.c trunk/core/roomlist.h trunk/core/savedstatuses.c trunk/core/savedstatuses.h trunk/core/server.c trunk/core/server.h trunk/core/signals.c trunk/core/signals.h trunk/core/sound.c trunk/core/sound.h trunk/core/sslconn.c trunk/core/sslconn.h trunk/core/status.c trunk/core/status.h trunk/core/stringref.c trunk/core/stringref.h trunk/core/stun.c trunk/core/stun.h trunk/core/upnp.c trunk/core/upnp.h trunk/core/util.c trunk/core/util.h trunk/core/value.c trunk/core/value.h trunk/core/version.h trunk/core/whiteboard.c trunk/core/whiteboard.h trunk/core/xmlnode.c trunk/core/xmlnode.h Removed Paths: ------------- trunk/core/plugins/mono/BooPlugin.boo trunk/core/plugins/mono/GetBuddyBack.cs trunk/core/plugins/mono/MPlugin.cs trunk/core/plugins/mono/Makefile.am trunk/core/plugins/mono/api/ trunk/core/plugins/mono/loader/ trunk/core/plugins/perl/Makefile.am trunk/core/plugins/perl/Makefile.mingw trunk/core/plugins/perl/common/ trunk/core/plugins/perl/libgaimperl.c trunk/core/plugins/perl/perl-common.c trunk/core/plugins/perl/perl-common.h trunk/core/plugins/perl/perl-handlers.c trunk/core/plugins/perl/perl-handlers.h trunk/core/plugins/perl/perl.c trunk/core/plugins/perl/scripts/ trunk/core/plugins/ssl/Makefile.am trunk/core/plugins/ssl/Makefile.mingw trunk/core/plugins/ssl/ssl-gnutls.c trunk/core/plugins/ssl/ssl-nss.c trunk/core/plugins/ssl/ssl.c trunk/core/plugins/tcl/Makefile.am trunk/core/plugins/tcl/Makefile.mingw trunk/core/plugins/tcl/signal-test.tcl trunk/core/plugins/tcl/tcl.c trunk/core/plugins/tcl/tcl_cmd.c trunk/core/plugins/tcl/tcl_cmds.c trunk/core/plugins/tcl/tcl_gaim.h trunk/core/plugins/tcl/tcl_glib.c trunk/core/plugins/tcl/tcl_glib.h trunk/core/plugins/tcl/tcl_ref.c trunk/core/plugins/tcl/tcl_signals.c trunk/core/protocols/Makefile.am trunk/core/protocols/bonjour/ trunk/core/protocols/gg/ trunk/core/protocols/irc/ trunk/core/protocols/jabber/ trunk/core/protocols/msn/ trunk/core/protocols/novell/ trunk/core/protocols/oscar/ trunk/core/protocols/qq/ trunk/core/protocols/sametime/ trunk/core/protocols/silc/ trunk/core/protocols/simple/ trunk/core/protocols/toc/ trunk/core/protocols/yahoo/ trunk/core/protocols/zephyr/ Property Changed: ---------------- trunk/core/plugins/mono/api/Buddy.cs trunk/core/plugins/mono/api/BuddyList.cs trunk/core/plugins/mono/api/Debug.cs trunk/core/plugins/mono/api/Event.cs trunk/core/plugins/mono/api/GaimPlugin.cs trunk/core/plugins/mono/api/Makefile.am trunk/core/plugins/mono/api/Signal.cs trunk/core/plugins/mono/api/Status.cs trunk/core/plugins/mono/loader/Makefile.am trunk/core/plugins/mono/loader/blist-glue.c trunk/core/plugins/mono/loader/debug-glue.c trunk/core/plugins/mono/loader/mono-glue.h trunk/core/plugins/mono/loader/mono-helper.c trunk/core/plugins/mono/loader/mono-helper.h trunk/core/plugins/mono/loader/mono.c trunk/core/plugins/mono/loader/signal-glue.c trunk/core/plugins/mono/loader/status-glue.c trunk/core/plugins/perl/common/Makefile.mingw trunk/core/plugins/perl/common/module.h trunk/core/plugins/perl/scripts/account.pl trunk/core/plugins/perl/scripts/buddy_list.pl trunk/core/plugins/perl/scripts/conversation.pl trunk/core/plugins/perl/scripts/count_down.pl trunk/core/plugins/perl/scripts/gtk_frame_test.pl trunk/core/plugins/perl/scripts/plugin_action.pl trunk/core/plugins/perl/scripts/plugin_pref.pl trunk/core/plugins/perl/scripts/request.pl trunk/core/protocols/bonjour/Makefile.am trunk/core/protocols/bonjour/Makefile.mingw trunk/core/protocols/bonjour/bonjour.c trunk/core/protocols/bonjour/bonjour.h trunk/core/protocols/bonjour/buddy.c trunk/core/protocols/bonjour/buddy.h trunk/core/protocols/bonjour/dns_sd.c trunk/core/protocols/bonjour/dns_sd.h trunk/core/protocols/bonjour/jabber.c trunk/core/protocols/bonjour/jabber.h trunk/core/protocols/gg/Makefile.am trunk/core/protocols/gg/Makefile.mingw trunk/core/protocols/gg/buddylist.c trunk/core/protocols/gg/buddylist.h trunk/core/protocols/gg/confer.c trunk/core/protocols/gg/confer.h trunk/core/protocols/gg/gg.c trunk/core/protocols/gg/gg.h trunk/core/protocols/gg/lib/common.c trunk/core/protocols/gg/lib/compat.h trunk/core/protocols/gg/lib/dcc.c trunk/core/protocols/gg/lib/events.c trunk/core/protocols/gg/lib/http.c trunk/core/protocols/gg/lib/libgadu-config.h trunk/core/protocols/gg/lib/libgadu.c trunk/core/protocols/gg/lib/libgadu.h trunk/core/protocols/gg/lib/obsolete.c trunk/core/protocols/gg/lib/pubdir.c trunk/core/protocols/gg/lib/pubdir50.c trunk/core/protocols/gg/search.c trunk/core/protocols/gg/search.h trunk/core/protocols/irc/Makefile.am trunk/core/protocols/irc/Makefile.mingw trunk/core/protocols/irc/cmds.c trunk/core/protocols/irc/dcc_send.c trunk/core/protocols/irc/irc.c trunk/core/protocols/irc/irc.h trunk/core/protocols/irc/msgs.c trunk/core/protocols/irc/parse.c trunk/core/protocols/jabber/Makefile.am trunk/core/protocols/jabber/Makefile.mingw trunk/core/protocols/jabber/auth.c trunk/core/protocols/jabber/auth.h trunk/core/protocols/jabber/buddy.c trunk/core/protocols/jabber/buddy.h trunk/core/protocols/jabber/chat.c trunk/core/protocols/jabber/chat.h trunk/core/protocols/jabber/disco.c trunk/core/protocols/jabber/disco.h trunk/core/protocols/jabber/iq.c trunk/core/protocols/jabber/iq.h trunk/core/protocols/jabber/jabber.c trunk/core/protocols/jabber/jabber.h trunk/core/protocols/jabber/jutil.c trunk/core/protocols/jabber/jutil.h trunk/core/protocols/jabber/message.c trunk/core/protocols/jabber/message.h trunk/core/protocols/jabber/oob.c trunk/core/protocols/jabber/oob.h trunk/core/protocols/jabber/parser.c trunk/core/protocols/jabber/parser.h trunk/core/protocols/jabber/presence.c trunk/core/protocols/jabber/presence.h trunk/core/protocols/jabber/roster.c trunk/core/protocols/jabber/roster.h trunk/core/protocols/jabber/si.c trunk/core/protocols/jabber/si.h trunk/core/protocols/jabber/win32/posix.uname.c trunk/core/protocols/jabber/win32/utsname.h trunk/core/protocols/jabber/xdata.c trunk/core/protocols/jabber/xdata.h trunk/core/protocols/msn/Makefile.am trunk/core/protocols/msn/Makefile.mingw trunk/core/protocols/msn/cmdproc.c trunk/core/protocols/msn/cmdproc.h trunk/core/protocols/msn/command.c trunk/core/protocols/msn/command.h trunk/core/protocols/msn/dialog.c trunk/core/protocols/msn/dialog.h trunk/core/protocols/msn/directconn.c trunk/core/protocols/msn/directconn.h trunk/core/protocols/msn/error.c trunk/core/protocols/msn/error.h trunk/core/protocols/msn/group.c trunk/core/protocols/msn/group.h trunk/core/protocols/msn/history.c trunk/core/protocols/msn/history.h trunk/core/protocols/msn/httpconn.c trunk/core/protocols/msn/httpconn.h trunk/core/protocols/msn/msg.c trunk/core/protocols/msn/msg.h trunk/core/protocols/msn/msn.c trunk/core/protocols/msn/msn.h trunk/core/protocols/msn/nexus.c trunk/core/protocols/msn/nexus.h trunk/core/protocols/msn/notification.c trunk/core/protocols/msn/notification.h trunk/core/protocols/msn/object.c trunk/core/protocols/msn/object.h trunk/core/protocols/msn/page.c trunk/core/protocols/msn/page.h trunk/core/protocols/msn/servconn.c trunk/core/protocols/msn/servconn.h trunk/core/protocols/msn/session.c trunk/core/protocols/msn/session.h trunk/core/protocols/msn/slp.c trunk/core/protocols/msn/slp.h trunk/core/protocols/msn/slpcall.c trunk/core/protocols/msn/slpcall.h trunk/core/protocols/msn/slplink.c trunk/core/protocols/msn/slplink.h trunk/core/protocols/msn/slpmsg.c trunk/core/protocols/msn/slpmsg.h trunk/core/protocols/msn/slpsession.c trunk/core/protocols/msn/slpsession.h trunk/core/protocols/msn/state.c trunk/core/protocols/msn/state.h trunk/core/protocols/msn/switchboard.c trunk/core/protocols/msn/switchboard.h trunk/core/protocols/msn/sync.c trunk/core/protocols/msn/sync.h trunk/core/protocols/msn/table.c trunk/core/protocols/msn/table.h trunk/core/protocols/msn/transaction.c trunk/core/protocols/msn/transaction.h trunk/core/protocols/msn/user.c trunk/core/protocols/msn/user.h trunk/core/protocols/msn/userlist.c trunk/core/protocols/msn/userlist.h trunk/core/protocols/novell/Makefile.am trunk/core/protocols/novell/Makefile.mingw trunk/core/protocols/novell/nmconference.c trunk/core/protocols/novell/nmconference.h trunk/core/protocols/novell/nmconn.c trunk/core/protocols/novell/nmconn.h trunk/core/protocols/novell/nmcontact.c trunk/core/protocols/novell/nmcontact.h trunk/core/protocols/novell/nmevent.c trunk/core/protocols/novell/nmevent.h trunk/core/protocols/novell/nmfield.c trunk/core/protocols/novell/nmfield.h trunk/core/protocols/novell/nmmessage.c trunk/core/protocols/novell/nmmessage.h trunk/core/protocols/novell/nmrequest.c trunk/core/protocols/novell/nmrequest.h trunk/core/protocols/novell/nmrtf.c trunk/core/protocols/novell/nmrtf.h trunk/core/protocols/novell/nmuser.c trunk/core/protocols/novell/nmuser.h trunk/core/protocols/novell/nmuserrecord.c trunk/core/protocols/novell/nmuserrecord.h trunk/core/protocols/novell/novell.c trunk/core/protocols/oscar/Makefile.am trunk/core/protocols/oscar/Makefile.mingw trunk/core/protocols/oscar/bstream.c trunk/core/protocols/oscar/family_admin.c trunk/core/protocols/oscar/family_advert.c trunk/core/protocols/oscar/family_alert.c trunk/core/protocols/oscar/family_auth.c trunk/core/protocols/oscar/family_bart.c trunk/core/protocols/oscar/family_bos.c trunk/core/protocols/oscar/family_buddy.c trunk/core/protocols/oscar/family_chat.c trunk/core/protocols/oscar/family_chatnav.c trunk/core/protocols/oscar/family_feedbag.c trunk/core/protocols/oscar/family_icbm.c trunk/core/protocols/oscar/family_icq.c trunk/core/protocols/oscar/family_invite.c trunk/core/protocols/oscar/family_locate.c trunk/core/protocols/oscar/family_odir.c trunk/core/protocols/oscar/family_oservice.c trunk/core/protocols/oscar/family_popup.c trunk/core/protocols/oscar/family_stats.c trunk/core/protocols/oscar/family_translate.c trunk/core/protocols/oscar/family_userlookup.c trunk/core/protocols/oscar/flap_connection.c trunk/core/protocols/oscar/misc.c trunk/core/protocols/oscar/msgcookie.c trunk/core/protocols/oscar/odc.c trunk/core/protocols/oscar/oft.c trunk/core/protocols/oscar/oscar.c trunk/core/protocols/oscar/oscar.h trunk/core/protocols/oscar/oscar_data.c trunk/core/protocols/oscar/peer.c trunk/core/protocols/oscar/peer.h trunk/core/protocols/oscar/peer_proxy.c trunk/core/protocols/oscar/rxhandlers.c trunk/core/protocols/oscar/snac.c trunk/core/protocols/oscar/snactypes.h trunk/core/protocols/oscar/tlv.c trunk/core/protocols/oscar/util.c trunk/core/protocols/sametime/Makefile.am trunk/core/protocols/sametime/Makefile.mingw trunk/core/protocols/sametime/sametime.c trunk/core/protocols/sametime/sametime.h trunk/core/protocols/silc/Makefile.am trunk/core/protocols/silc/Makefile.mingw trunk/core/protocols/silc/buddy.c trunk/core/protocols/silc/chat.c trunk/core/protocols/silc/ft.c trunk/core/protocols/silc/ops.c trunk/core/protocols/silc/pk.c trunk/core/protocols/silc/silc.c trunk/core/protocols/silc/silcgaim.h trunk/core/protocols/silc/util.c trunk/core/protocols/silc/wb.c trunk/core/protocols/silc/wb.h trunk/core/protocols/simple/Makefile.am trunk/core/protocols/simple/Makefile.mingw trunk/core/protocols/simple/simple.c trunk/core/protocols/simple/simple.h trunk/core/protocols/simple/sipmsg.c trunk/core/protocols/simple/sipmsg.h trunk/core/protocols/toc/Makefile.am trunk/core/protocols/toc/Makefile.mingw trunk/core/protocols/toc/toc.c trunk/core/protocols/yahoo/Makefile.am trunk/core/protocols/yahoo/Makefile.mingw trunk/core/protocols/yahoo/util.c trunk/core/protocols/yahoo/yahoo.c trunk/core/protocols/yahoo/yahoo.h trunk/core/protocols/yahoo/yahoo_auth.c trunk/core/protocols/yahoo/yahoo_auth.h trunk/core/protocols/yahoo/yahoo_crypt.c trunk/core/protocols/yahoo/yahoo_crypt.h trunk/core/protocols/yahoo/yahoo_doodle.c trunk/core/protocols/yahoo/yahoo_doodle.h trunk/core/protocols/yahoo/yahoo_filexfer.c trunk/core/protocols/yahoo/yahoo_filexfer.h trunk/core/protocols/yahoo/yahoo_friend.c trunk/core/protocols/yahoo/yahoo_friend.h trunk/core/protocols/yahoo/yahoo_packet.c trunk/core/protocols/yahoo/yahoo_packet.h trunk/core/protocols/yahoo/yahoo_picture.c trunk/core/protocols/yahoo/yahoo_picture.h trunk/core/protocols/yahoo/yahoo_profile.c trunk/core/protocols/yahoo/yahoochat.c trunk/core/protocols/yahoo/yahoochat.h trunk/core/protocols/yahoo/ycht.c trunk/core/protocols/yahoo/ycht.h trunk/core/protocols/zephyr/Makefile.am trunk/core/protocols/zephyr/Makefile.mingw trunk/core/protocols/zephyr/ZAsyncLocate.c trunk/core/protocols/zephyr/ZCkAuth.c trunk/core/protocols/zephyr/ZCkIfNot.c trunk/core/protocols/zephyr/ZClosePort.c trunk/core/protocols/zephyr/ZCmpUID.c trunk/core/protocols/zephyr/ZCmpUIDP.c trunk/core/protocols/zephyr/ZFlsLocs.c trunk/core/protocols/zephyr/ZFlsSubs.c trunk/core/protocols/zephyr/ZFmtAuth.c trunk/core/protocols/zephyr/ZFmtList.c trunk/core/protocols/zephyr/ZFmtNotice.c trunk/core/protocols/zephyr/ZFmtRaw.c trunk/core/protocols/zephyr/ZFmtRawLst.c trunk/core/protocols/zephyr/ZFmtSmRLst.c trunk/core/protocols/zephyr/ZFmtSmRaw.c trunk/core/protocols/zephyr/ZFreeNot.c trunk/core/protocols/zephyr/ZGetLocs.c trunk/core/protocols/zephyr/ZGetSender.c trunk/core/protocols/zephyr/ZGetSubs.c trunk/core/protocols/zephyr/ZGetWGPort.c trunk/core/protocols/zephyr/ZIfNotice.c trunk/core/protocols/zephyr/ZInit.c trunk/core/protocols/zephyr/ZLocations.c trunk/core/protocols/zephyr/ZMakeAscii.c trunk/core/protocols/zephyr/ZMkAuth.c trunk/core/protocols/zephyr/ZNewLocU.c trunk/core/protocols/zephyr/ZOpenPort.c trunk/core/protocols/zephyr/ZParseNot.c trunk/core/protocols/zephyr/ZPeekIfNot.c trunk/core/protocols/zephyr/ZPeekNot.c trunk/core/protocols/zephyr/ZPeekPkt.c trunk/core/protocols/zephyr/ZPending.c trunk/core/protocols/zephyr/ZReadAscii.c trunk/core/protocols/zephyr/ZRecvNot.c trunk/core/protocols/zephyr/ZRecvPkt.c trunk/core/protocols/zephyr/ZRetSubs.c trunk/core/protocols/zephyr/ZSendList.c trunk/core/protocols/zephyr/ZSendNot.c trunk/core/protocols/zephyr/ZSendPkt.c trunk/core/protocols/zephyr/ZSendRLst.c trunk/core/protocols/zephyr/ZSendRaw.c trunk/core/protocols/zephyr/ZSetDest.c trunk/core/protocols/zephyr/ZSetFD.c trunk/core/protocols/zephyr/ZSetSrv.c trunk/core/protocols/zephyr/ZSubs.c trunk/core/protocols/zephyr/ZVariables.c trunk/core/protocols/zephyr/ZWait4Not.c trunk/core/protocols/zephyr/ZhmStat.c trunk/core/protocols/zephyr/Zinternal.c trunk/core/protocols/zephyr/com_err.h trunk/core/protocols/zephyr/error_message.c trunk/core/protocols/zephyr/error_table.h trunk/core/protocols/zephyr/et_name.c trunk/core/protocols/zephyr/init_et.c trunk/core/protocols/zephyr/internal.h trunk/core/protocols/zephyr/mit-copyright.h trunk/core/protocols/zephyr/mit-sipb-copyright.h trunk/core/protocols/zephyr/sysdep.h trunk/core/protocols/zephyr/zephyr.c trunk/core/protocols/zephyr/zephyr.h trunk/core/protocols/zephyr/zephyr_err.c trunk/core/protocols/zephyr/zephyr_err.h Added: trunk/core/Makefile.am =================================================================== --- trunk/core/Makefile.am (rev 0) +++ trunk/core/Makefile.am 2006-08-19 01:13:25 UTC (rev 16856) @@ -0,0 +1,274 @@ +EXTRA_DIST = \ + dbus-analyze-functions.py \ + dbus-analyze-types.py \ + gaim-notifications-example \ + gaim-remote \ + gaim-send \ + gaim-send-async \ + Makefile.mingw \ + win_gaim.c \ + win32/IdleTracker/Makefile.mingw \ + win32/IdleTracker/idletrack.c \ + win32/IdleTracker/idletrack.h \ + win32/gaimrc.rc \ + win32/global.mak \ + win32/libc_interface.c \ + win32/libc_interface.h \ + win32/libc_internal.h \ + win32/resource.h \ + win32/untar.c \ + win32/untar.h \ + win32/wgaimerror.h \ + win32/win32dep.c \ + win32/win32dep.h \ + win32/wspell.c \ + win32/wspell.h \ + win32/nsis/gaim-header.bmp \ + win32/nsis/gaim-intro.bmp \ + win32/nsis/gaim-plugin.nsh \ + win32/nsis/langmacros.nsh \ + win32/nsis/translations/albanian.nsh \ + win32/nsis/translations/bulgarian.nsh \ + win32/nsis/translations/catalan.nsh \ + win32/nsis/translations/czech.nsh \ + win32/nsis/translations/danish.nsh \ + win32/nsis/translations/dutch.nsh \ + win32/nsis/translations/english.nsh \ + win32/nsis/translations/finnish.nsh \ + win32/nsis/translations/french.nsh \ + win32/nsis/translations/german.nsh \ + win32/nsis/translations/hebrew.nsh \ + win32/nsis/translations/hungarian.nsh \ + win32/nsis/translations/italian.nsh \ + win32/nsis/translations/japanese.nsh \ + win32/nsis/translations/korean.nsh \ + win32/nsis/translations/kurdish.nsh \ + win32/nsis/translations/lithuanian.nsh \ + win32/nsis/translations/norwegian.nsh \ + win32/nsis/translations/polish.nsh \ + win32/nsis/translations/portuguese.nsh \ + win32/nsis/translations/portuguese-br.nsh \ + win32/nsis/translations/romanian.nsh \ + win32/nsis/translations/russian.nsh \ + win32/nsis/translations/serbian-latin.nsh \ + win32/nsis/translations/simp-chinese.nsh \ + win32/nsis/translations/slovak.nsh \ + win32/nsis/translations/slovenian.nsh \ + win32/nsis/translations/spanish.nsh \ + win32/nsis/translations/swedish.nsh \ + win32/nsis/translations/trad-chinese.nsh \ + win32/nsis/translations/vietnamese.nsh + +SUBDIRS = plugins protocols + +gaim_coresources = \ + account.c \ + accountopt.c \ + blist.c \ + buddyicon.c \ + cipher.c \ + circbuffer.c \ + cmds.c \ + connection.c \ + conversation.c \ + core.c \ + debug.c \ + desktopitem.c \ + eventloop.c \ + ft.c \ + idle.c \ + imgstore.c \ + log.c \ + mime.c \ + network.c \ + ntlm.c \ + notify.c \ + plugin.c \ + pluginpref.c \ + pounce.c \ + prefix.c \ + prefs.c \ + privacy.c \ + proxy.c \ + prpl.c \ + request.c \ + roomlist.c \ + savedstatuses.c \ + server.c \ + signals.c \ + dnssrv.c\ + status.c \ + stringref.c \ + stun.c \ + sound.c \ + sslconn.c \ + upnp.c \ + util.c \ + value.c \ + xmlnode.c \ + whiteboard.c + +gaim_coreheaders = \ + account.h \ + accountopt.h \ + blist.h \ + buddyicon.h \ + cipher.h \ + circbuffer.h \ + cmds.h \ + connection.h \ + conversation.h \ + core.h \ + dbus-maybe.h \ + debug.h \ + desktopitem.h \ + eventloop.h \ + ft.h \ + idle.h \ + imgstore.h \ + log.h \ + mime.h \ + network.h \ + notify.h \ + ntlm.h \ + plugin.h \ + pluginpref.h \ + pounce.h \ + prefs.h \ + privacy.h \ + proxy.h \ + prpl.h \ + request.h \ + roomlist.h \ + savedstatuses.h \ + server.h \ + signals.h \ + dnssrv.h \ + status.h \ + stringref.h \ + stun.h \ + sound.h \ + sslconn.h \ + upnp.h \ + util.h \ + value.h \ + version.h \ + xmlnode.h \ + whiteboard.h + +if ENABLE_DBUS + +CLEANFILES = \ + dbus-bindings.c \ + dbus-client-binding.c \ + dbus-client-binding.h \ + dbus-types.c \ + dbus-types.h \ + gaim-client-bindings.c \ + gaim-client-bindings.h \ + gaim.service + +# gaim dbus server + +dbus_sources = dbus-server.c dbus-useful.c +dbus_headers = dbus-bindings.h dbus-gaim.h dbus-server.h dbus-useful.h dbus-define-api.h + +dbus_exported = dbus-useful.h dbus-define-api.h account.h blist.h buddyicon.h connection.h conversation.h core.h log.h roomlist.h savedstatuses.h status.h server.h + +gaim_build_coreheaders = $(addprefix $(srcdir)/, $(gaim_coreheaders)) +dbus_build_exported = $(addprefix $(srcdir)/, $(dbus_exported)) + +dbus-types.c: dbus-analyze-types.py $(gaim_coreheaders) + cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=GAIM_DBUS_DEFINE_TYPE\(%s\) > $@ + +dbus-types.h: dbus-analyze-types.py $(dbus_coreheaders) + cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=GAIM_DBUS_DECLARE_TYPE\(%s\) > $@ + +dbus-bindings.c: dbus-analyze-functions.py $(dbus_exported) + cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py > $@ + +dbus-server.$(OBJEXT): dbus-bindings.c dbus-types.c dbus-types.h +dbus-server.lo: dbus-bindings.c dbus-types.c dbus-types.h +$(libgaim_la_OBJECTS): dbus-types.h + +# libgaim-client + +libgaim_client_lib = libgaim-client.la + +libgaim_client_la_SOURCES = gaim-client.c gaim-client.h + +libgaim_client_la_LIBADD = $(DBUS_LIBS) + +gaim-client-bindings.c: dbus-analyze-functions.py $(dbus_exported) + cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client > $@ + +gaim-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(gaim_coreheaders) $(dbus_exported) + cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim > $@ + cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client --headers >> $@ + +$(libgaim_client_la_OBJECTS): gaim-client-bindings.h gaim-client-bindings.c + +# gaim-client-example + +gaim_client_example_SOURCES = gaim-client-example.c + +gaim_client_example_DEPENDENCIES = @LIBOBJS@ libgaim-client.la + +gaim_client_example_LDADD = \ + @LIBOBJS@ \ + libgaim-client.la \ + $(GLIB_LIBS) \ + $(DBUS_LIBS) + +bin_PROGRAMS = gaim-client-example + +gaim-client-example.$(OBJEXT): gaim-client-bindings.h + +# scripts + +bin_SCRIPTS = gaim-remote gaim-send gaim-send-async + +exampledir = $(datadir)/doc/@PACKAGE@/examples +example_DATA = gaim-notifications-example + +endif + +lib_LTLIBRARIES = libgaim.la $(libgaim_client_lib) + +libgaim_la_SOURCES = \ + $(gaim_coresources) \ + $(dbus_sources) + +noinst_HEADERS= \ + internal.h \ + prefix.h + +libgaimincludedir=$(includedir)/gaim +libgaiminclude_HEADERS = \ + $(gaim_coreheaders) \ + $(dbus_headers) + +libgaim_la_DEPENDENCIES = @LIBOBJS@ $(STATIC_LINK_LIBS) $(MS_LIBS) +libgaim_la_LDFLAGS = -export-dynamic +libgaim_la_LIBADD = \ + @LIBOBJS@ \ + $(DBUS_LIBS) \ + $(GLIB_LIBS) \ + $(GMODULE_LIBS) \ + $(GOBJECT_LIBS) \ + $(GSTREAMER_LIBS) \ + $(STATIC_LINK_LIBS) \ + $(INTLLIBS) \ + -lm + +AM_CPPFLAGS = \ + -DBR_PTHREADS=0 \ + -DDATADIR=\"$(datadir)\" \ + -DLIBDIR=\"$(libdir)/gaim/\" \ + -DLOCALEDIR=\"$(datadir)/locale\" \ + -DSYSCONFDIR=\"$(sysconfdir)\" \ + -I$(top_srcdir)/plugins \ + $(GSTREAMER_CFLAGS) \ + $(DEBUG_CFLAGS) \ + $(DBUS_CFLAGS) \ + $(LIBXML_CFLAGS) Property changes on: trunk/core/Makefile.am ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Copied: trunk/core/account.c (from rev 16843, trunk/src/account.c) =================================================================== --- trunk/core/account.c (rev 0) +++ trunk/core/account.c 2006-08-19 01:13:25 UTC (rev 16856) @@ -0,0 +1,2364 @@ +/** + * @file account.c Account API + * @ingroup core + * + * gaim + * + * Gaim is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include "internal.h" +#include "account.h" +#include "core.h" +#include "dbus-maybe.h" +#include "debug.h" +#include "notify.h" +#include "pounce.h" +#include "prefs.h" +#include "privacy.h" +#include "prpl.h" +#include "request.h" +#include "server.h" +#include "signals.h" +#include "status.h" +#include "util.h" +#include "xmlnode.h" + +/* TODO: Should use GaimValue instead of this? What about "ui"? */ +typedef struct +{ + GaimPrefType type; + + char *ui; + + union + { + int integer; + char *string; + gboolean bool; + + } value; + +} GaimAccountSetting; + + +static GaimAccountUiOps *account_ui_ops = NULL; + +static GList *accounts = NULL; +static guint save_timer = 0; +static gboolean accounts_loaded = FALSE; + + +/********************************************************************* + * Writing to disk * + *********************************************************************/ + +static void +setting_to_xmlnode(gpointer key, gpointer value, gpointer user_data) +{ + const char *name; + GaimAccountSetting *setting; + xmlnode *node, *child; + char buf[20]; + + name = (const char *)key; + setting = (GaimAccountSetting *)value; + node = (xmlnode *)user_data; + + child = xmlnode_new_child(node, "setting"); + xmlnode_set_attrib(child, "name", name); + + if (setting->type == GAIM_PREF_INT) { + xmlnode_set_attrib(child, "type", "int"); + snprintf(buf, sizeof(buf), "%d", setting->value.integer); + xmlnode_insert_data(child, buf, -1); + } + else if (setting->type == GAIM_PREF_STRING && setting->value.string != NULL) { + xmlnode_set_attrib(child, "type", "string"); + xmlnode_insert_data(child, setting->value.string, -1); + } + else if (setting->type == GAIM_PREF_BOOLEAN) { + xmlnode_set_attrib(child, "type", "bool"); + snprintf(buf, sizeof(buf), "%d", setting->value.bool); + xmlnode_insert_data(child, buf, -1); + } +} + +static void +ui_setting_to_xmlnode(gpointer key, gpointer value, gpointer user_data) +{ + const char *ui; + GHashTable *table; + xmlnode *node, *child; + + ui = (const char *)key; + table = (GHashTable *)value; + node = (xmlnode *)user_data; + + if (g_hash_table_size(table) > 0) + { + child = xmlnode_new_child(node, "settings"); + xmlnode_set_attrib(child, "ui", ui); + g_hash_table_foreach(table, setting_to_xmlnode, child); + } +} + +static xmlnode * +status_attr_to_xmlnode(const GaimStatus *status, const GaimStatusType *type, const GaimStatusAttr *attr) +{ + xmlnode *node; + const char *id; + char *value = NULL; + GaimStatusAttr *default_attr; + GaimValue *default_value; + GaimType attr_type; + GaimValue *attr_value; + + id = gaim_status_attr_get_id(attr); + g_return_val_if_fail(id, NULL); + + attr_value = gaim_status_get_attr_value(status, id); + g_return_val_if_fail(attr_value, NULL); + attr_type = gaim_value_get_type(attr_value); + + /* + * If attr_value is a different type than it should be + * then don't write it to the file. + */ + default_attr = gaim_status_type_get_attr(type, id); + default_value = gaim_status_attr_get_value(default_attr); + if (attr_type != gaim_value_get_type(default_value)) + return NULL; + + /* + * If attr_value is the same as the default for this status + * then there is no need to write it to the file. + */ + if (attr_type == GAIM_TYPE_STRING) + { + const char *string_value = gaim_value_get_string(attr_value); + const char *default_string_value = gaim_value_get_string(default_value); + if (((string_value == NULL) && (default_string_value == NULL)) || + ((string_value != NULL) && (default_string_value != NULL) && + !strcmp(string_value, default_string_value))) + return NULL; + value = g_strdup(gaim_value_get_string(attr_value)); + } + else if (attr_type == GAIM_TYPE_INT) + { + int int_value = gaim_value_get_int(attr_value); + if (int_value == gaim_value_get_int(default_value)) + return NULL; + value = g_strdup_printf("%d", int_value); + } + else if (attr_type == GAIM_TYPE_BOOLEAN) + { + gboolean boolean_value = gaim_value_get_boolean(attr_value); + if (boolean_value == gaim_value_get_boolean(default_value)) + return NULL; + value = g_strdup(boolean_value ? + "true" : "false"); + } + else + { + return NULL; + } + + g_return_val_if_fail(value, NULL); + + node = xmlnode_new("attribute"); + + xmlnode_set_attrib(node, "id", id); + xmlnode_set_attrib(node, "value", value); + + g_free(value); + + return node; +} + +static xmlnode * +status_attrs_to_xmlnode(const GaimStatus *status) +{ + GaimStatusType *type = gaim_status_get_type(status); + xmlnode *node, *child; + const GList *attrs, *attr; + + node = xmlnode_new("attributes"); + + attrs = gaim_status_type_get_attrs(type); + for (attr = attrs; attr != NULL; attr = attr->next) + { + child = status_attr_to_xmlnode(status, type, (const GaimStatusAttr *)attr->data); + if (child) + xmlnode_insert_child(node, child); + } + + return node; +} + +static xmlnode * +status_to_xmlnode(const GaimStatus *status) +{ + xmlnode *node, *child; + + node = xmlnode_new("status"); + xmlnode_set_attrib(node, "type", gaim_status_get_id(status)); + if (gaim_status_get_name(status) != NULL) + xmlnode_set_attrib(node, "name", gaim_status_get_name(status)); + xmlnode_set_attrib(node, "active", gaim_status_is_active(status) ? "true" : "false"); + + child = status_attrs_to_xmlnode(status); + xmlnode_insert_child(node, child); + + return node; +} + +static xmlnode * +statuses_to_xmlnode(const GaimPresence *presence) +{ + xmlnode *node, *child; + const GList *statuses, *status; + + node = xmlnode_new("statuses"); + + statuses = gaim_presence_get_statuses(presence); + for (status = statuses; status != NULL; status = status->next) + { + child = status_to_xmlnode((GaimStatus *)status->data); + xmlnode_insert_child(node, child); + } + + return node; +} + +static xmlnode * +proxy_settings_to_xmlnode(GaimProxyInfo *proxy_info) +{ + xmlnode *node, *child; + GaimProxyType proxy_type; + const char *value; + int int_value; + char buf[20]; + + proxy_type = gaim_proxy_info_get_type(proxy_info); + + node = xmlnode_new("proxy"); + + child = xmlnode_new_child(node, "type"); + xmlnode_insert_data(child, + (proxy_type == GAIM_PROXY_USE_GLOBAL ? "global" : + proxy_type == GAIM_PROXY_NONE ? "none" : + proxy_type == GAIM_PROXY_HTTP ? "http" : + proxy_type == GAIM_PROXY_SOCKS4 ? "socks4" : + proxy_type == GAIM_PROXY_SOCKS5 ? "socks5" : + proxy_type == GAIM_PROXY_USE_ENVVAR ? "envvar" : "unknown"), -1); + + if (proxy_type != GAIM_PROXY_USE_GLOBAL && + proxy_type != GAIM_PROXY_NONE && + proxy_type != GAIM_PROXY_USE_ENVVAR) + { + if ((value = gaim_proxy_info_get_host(proxy_info)) != NULL) + { + child = xmlnode_new_child(node, "host"); + xmlnode_insert_data(child, value, -1); + } + + if ((int_value = gaim_proxy_info_get_port(proxy_info)) != 0) + { + snprintf(buf, sizeof(buf), "%d", int_value); + child = xmlnode_new_child(node, "port"); + xmlnode_insert_data(child, buf, -1); + } + + if ((value = gaim_proxy_info_get_username(proxy_info)) != NULL) + { + child = xmlnode_new_child(node, "username"); + xmlnode_insert_data(child, value, -1); + } + + if ((value = gaim_proxy_info_get_password(proxy_info)) != NULL) + { + child = xmlnode_new_child(node, "password"); + xmlnode_insert_data(child, value, -1); + } + } + + return node; +} + +static xmlnode * +account_to_xmlnode(GaimAccount *account) +{ + xmlnode *node, *child; + const char *tmp; + GaimPresence *presence; + GaimProxyInfo *proxy_info; + + node = xmlnode_new("account"); + + child = xmlnode_new_child(node, "protocol"); + xmlnode_insert_data(child, gaim_account_get_protocol_id(account), -1); + + child = xmlnode_new_child(node, "name"); + xmlnode_insert_data(child, gaim_account_get_username(account), -1); + + if (gaim_account_get_remember_password(account) && + ((tmp = gaim_account_get_password(account)) != NULL)) + { + child = xmlnode_new_child(node, "password"); + xmlnode_insert_data(child, tmp, -1); + } + + if ((tmp = gaim_account_get_alias(account)) != NULL) + { + child = xmlnode_new_child(node, "alias"); + xmlnode_insert_data(child, tmp, -1); + } + + if ((presence = gaim_account_get_presence(account)) != NULL) + { + child = statuses_to_xmlnode(presence); + xmlnode_insert_child(node, child); + } + + if ((tmp = gaim_account_get_user_info(account)) != NULL) + { + /* TODO: Do we need to call gaim_str_strip_char(tmp, '\r') here? */ + child = xmlnode_new_child(node, "userinfo"); + xmlnode_insert_data(child, tmp, -1); + } + + if ((tmp = gaim_account_get_buddy_icon(account)) != NULL) + { + child = xmlnode_new_child(node, "buddyicon"); + xmlnode_insert_data(child, tmp, -1); + } + + if (g_hash_table_size(account->settings) > 0) + { + child = xmlnode_new_child(node, "settings"); + g_hash_table_foreach(account->settings, setting_to_xmlnode, child); + } + + if (g_hash_table_size(account->ui_settings) > 0) + { + g_hash_table_foreach(account->ui_settings, ui_setting_to_xmlnode, node); + } + + if ((proxy_info = gaim_account_get_proxy_info(account)) != NULL) + { + child = proxy_settings_to_xmlnode(proxy_info); + xmlnode_insert_child(node, child); + } + + return node; +} + +static xmlnode * +accounts_to_xmlnode(void) +{ + xmlnode *node, *child; + GList *cur; + + node = xmlnode_new("account"); + xmlnode_set_attrib(node, "version", "1.0"); + + for (cur = gaim_accounts_get_all(); cur != NULL; cur = cur->next) + { + child = account_to_xmlnode(cur->data); + xmlnode_insert_child(node, child); + } + + return node; +} + +static void +sync_accounts(void) +{ + xmlnode *node; + char *data; + + if (!accounts_loaded) + { + gaim_debug_error("account", "Attempted to save accounts before " + "they were read!\n"); + return; + } + + node = accounts_to_xmlnode(); + data = xmlnode_to_formatted_str(node, NULL); + gaim_util_write_data_to_file("accounts.xml", data, -1); + g_free(data); + xmlnode_free(node); +} + +static gboolean +save_cb(gpointer data) +{ + sync_accounts(); + save_timer = 0; + return FALSE; +} + +static void +schedule_accounts_save() +{ + if (save_timer == 0) + save_timer = gaim_timeout_add(5000, save_cb, NULL); +} + + +/********************************************************************* + * Reading from disk * + *********************************************************************/ + +static void +parse_settings(xmlnode *node, GaimAccount *account) +{ + const char *ui; + xmlnode *child; + + /* Get the UI string, if these are UI settings */ + ui = xmlnode_get_attrib(node, "ui"); + + /* Read settings, one by one */ + for (child = xmlnode_get_child(node, "setting"); child != NULL; + child = xmlnode_get_next_twin(child)) + { + const char *name, *str_type; + GaimPrefType type; + char *data; + + name = xmlnode_get_attrib(child, "name"); + if (name == NULL) + /* Ignore this setting */ + continue; + + str_type = xmlnode_get_attrib(child, "type"); + if (str_type == NULL) + /* Ignore this setting */ + continue; + + if (!strcmp(str_type, "string")) + type = GAIM_PREF_STRING; + else if (!strcmp(str_type, "int")) + type = GAIM_PREF_INT; + else if (!strcmp(str_type, "bool")) + type = GAIM_PREF_BOOLEAN; + else + /* Ignore this setting */ + continue; + + data = xmlnode_get_data(child); + if (data == NULL) + /* Ignore this setting */ + continue; + + if (ui == NULL) + { + if (type == GAIM_PREF_STRING) + gaim_account_set_string(account, name, data); + else if (type == GAIM_PREF_INT) + gaim_account_set_int(account, name, atoi(data)); + else if (type == GAIM_PREF_BOOLEAN) + gaim_account_set_bool(account, name, + (*data == '0' ? FALSE : TRUE)); + } else { + if (type == GAIM_PREF_STRING) + gaim_account_set_ui_string(account, ui, name, data); + else if (type == GAIM_PREF_INT) + gaim_account_set_ui_int(account, ui, name, atoi(data)); + else if (type == GAIM_PREF_BOOLEAN) + gaim_account_set_ui_bool(account, ui, name, + (*data == '0' ? FALSE : TRUE)); + } + + g_free(data); + } +} + +static GList * +parse_status_attrs(xmlnode *node, GaimStatus *status) +{ + GList *list = NULL; + xmlnode *child; + GaimValue *attr_value; + + for (child = xmlnode_get_child(node, "attribute"); child != NULL; + child = xmlnode_get_next_twin(child)) + { + const char *id = xmlnode_get_attrib(child, "id"); + const char *value = xmlnode_get_attrib(child, "value"); + + if (!id || !*id || !value || !*value) + continue; + + attr_value = gaim_status_get_attr_value(status, id); + if (!attr_value) + continue; + + list = g_list_append(list, (char *)id); + + switch (gaim_value_get_type(attr_value)) + { + case GAIM_TYPE_STRING: + list = g_list_append(list, (char *)value); + break; + case GAIM_TYPE_INT: + case GAIM_TYPE_BOOLEAN: + { + int v; + if (sscanf(value, "%d", &v) == 1) + list = g_list_append(list, GINT_TO_POINTER(v)); + else + list = g_list_remove(list, id); + break; + } + default: + break; + } + } + + return list; +} + +static void +parse_status(xmlnode *node, GaimAccount *account) +{ + gboolean active = FALSE; + const char *data; + const char *type; + xmlnode *child; + GList *attrs = NULL; + + /* Get the active/inactive state */ + data = xmlnode_get_attrib(node, "active"); + if (data == NULL) + return; + if (strcasecmp(data, "true") == 0) + active = TRUE; + else if (strcasecmp(data, "false") == 0) + active = FALSE; + else + return; + + /* Get the type of the status */ + type = xmlnode_get_attrib(node, "type"); + if (type == NULL) + return; + + /* Read attributes into a GList */ + child = xmlnode_get_child(node, "attributes"); + if (child != NULL) + { + attrs = parse_status_attrs(child, + gaim_account_get_status(account, type)); + } + + gaim_account_set_status_list(account, type, active, attrs); + + g_list_free(attrs); +} + +static void +parse_statuses(xmlnode *node, GaimAccount *account) +{ + xmlnode *child; + + for (child = xmlnode_get_child(node, "status"); child != NULL; + child = xmlnode_get_next_twin(child)) + { + parse_status(child, account); + } +} + +static void +parse_proxy_info(xmlnode *node, GaimAccount *account) +{ + GaimProxyInfo *proxy_info; + xmlnode *child; + char *data; + + proxy_info = gaim_proxy_info_new(); + + /* Use the global proxy settings, by default */ + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_USE_GLOBAL); + + /* Read proxy type */ + child = xmlnode_get_child(node, "type"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + if (!strcmp(data, "global")) + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_USE_GLOBAL); + else if (!strcmp(data, "none")) + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_NONE); + else if (!strcmp(data, "http")) + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_HTTP); + else if (!strcmp(data, "socks4")) + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_SOCKS4); + else if (!strcmp(data, "socks5")) + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_SOCKS5); + else if (!strcmp(data, "envvar")) + gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_USE_ENVVAR); + else + { + gaim_debug_error("account", "Invalid proxy type found when " + "loading account information for %s\n", + gaim_account_get_username(account)); + } + g_free(data); + } + + /* Read proxy host */ + child = xmlnode_get_child(node, "host"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_proxy_info_set_host(proxy_info, data); + g_free(data); + } + + /* Read proxy port */ + child = xmlnode_get_child(node, "port"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_proxy_info_set_port(proxy_info, atoi(data)); + g_free(data); + } + + /* Read proxy username */ + child = xmlnode_get_child(node, "username"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_proxy_info_set_username(proxy_info, data); + g_free(data); + } + + /* Read proxy password */ + child = xmlnode_get_child(node, "password"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_proxy_info_set_password(proxy_info, data); + g_free(data); + } + + /* If there are no values set then proxy_infourn NULL */ + if ((gaim_proxy_info_get_type(proxy_info) == GAIM_PROXY_USE_GLOBAL) && + (gaim_proxy_info_get_host(proxy_info) == NULL) && + (gaim_proxy_info_get_port(proxy_info) == 0) && + (gaim_proxy_info_get_username(proxy_info) == NULL) && + (gaim_proxy_info_get_password(proxy_info) == NULL)) + { + gaim_proxy_info_destroy(proxy_info); + return; + } + + gaim_account_set_proxy_info(account, proxy_info); +} + +static GaimAccount * +parse_account(xmlnode *node) +{ + GaimAccount *ret; + xmlnode *child; + char *protocol_id = NULL; + char *name = NULL; + char *data; + + child = xmlnode_get_child(node, "protocol"); + if (child != NULL) + protocol_id = xmlnode_get_data(child); + + child = xmlnode_get_child(node, "name"); + if (child != NULL) + name = xmlnode_get_data(child); + if (name == NULL) + { + /* Do we really need to do this? */ + child = xmlnode_get_child(node, "username"); + if (child != NULL) + name = xmlnode_get_data(child); + } + + if ((protocol_id == NULL) || (name == NULL)) + { + g_free(protocol_id); + g_free(name); + return NULL; + } + + ret = gaim_account_new(name, protocol_id); + g_free(name); + g_free(protocol_id); + + /* Read the password */ + child = xmlnode_get_child(node, "password"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_account_set_remember_password(ret, TRUE); + gaim_account_set_password(ret, data); + g_free(data); + } + + /* Read the alias */ + child = xmlnode_get_child(node, "alias"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + if (*data != '\0') + gaim_account_set_alias(ret, data); + g_free(data); + } + + /* Read the statuses */ + child = xmlnode_get_child(node, "statuses"); + if (child != NULL) + { + parse_statuses(child, ret); + } + + /* Read the userinfo */ + child = xmlnode_get_child(node, "userinfo"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_account_set_user_info(ret, data); + g_free(data); + } + + /* Read the buddyicon */ + child = xmlnode_get_child(node, "buddyicon"); + if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) + { + gaim_account_set_buddy_icon(ret, data); + g_free(data); + } + + /* Read settings (both core and UI) */ + for (child = xmlnode_get_child(node, "settings"); child != NULL; + child = xmlnode_get_next_twin(child)) + { + parse_settings(child, ret); + } + + /* Read proxy */ + child = xmlnode_get_child(node, "proxy"); + if (child != NULL) + { + parse_proxy_info(child, ret); + } + + return ret; +} + +static void +load_accounts(void) +{ + xmlnode *node, *child; + + accounts_loaded = TRUE; + + node = gaim_util_read_xml_from_file("accounts.xml", _("accounts")); + + if (node == NULL) + return; + + for (child = xmlnode_get_child(node, "account"); child != NULL; + child = xmlnode_get_next_twin(child)) + { + GaimAccount *new_acct; + new_acct = parse_account(child); + gaim_accounts_add(new_acct); + } + + xmlnode_free(node); +} + + +static void +delete_setting(void *data) +{ + GaimAccountSetting *setting = (GaimAccountSetting *)data; + + g_free(setting->ui); + + if (setting->type == GAIM_PREF_STRING) + g_free(setting->value.string); + + g_free(setting); +} + +GaimAccount * +gaim_account_new(const char *username, const char *protocol_id) +{ + GaimAccount *account = NULL; + GaimPlugin *prpl = NULL; + GaimPluginProtocolInfo *prpl_info = NULL; + GaimStatusType *status_type; + + g_return_val_if_fail(username != NULL, NULL); + g_return_val_if_fail(protocol_id != NULL, NULL); + + account = gaim_accounts_find(username, protocol_id); + + if (account != NULL) + return account; + + account = g_new0(GaimAccount, 1); + GAIM_DBUS_REGISTER_POINTER(account, GaimAccount); + + gaim_account_set_username(account, username); + + gaim_account_set_protocol_id(account, protocol_id); + + account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, delete_setting); + account->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, (GDestroyNotify)g_hash_table_destroy); + account->system_log = NULL; + /* 0 is not a valid privacy setting */ + account->perm_deny = GAIM_PRIVACY_ALLOW_ALL; + + account->presence = gaim_presence_new_for_account(account); + + prpl = gaim_find_prpl(protocol_id); + + if (prpl == NULL) + return account; + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); + if (prpl_info != NULL && prpl_info->status_types != NULL) + gaim_account_set_status_types(account, prpl_info->status_types(account)); + + status_type = gaim_account_get_status_type_with_primitive(account, GAIM_STATUS_AVAILABLE); + if (status_type != NULL) + gaim_presence_set_status_active(account->presence, + gaim_status_type_get_id(status_type), + TRUE); + else + gaim_presence_set_status_active(account->presence, + "offline", + TRUE); + + return account; +} + +void +gaim_account_destroy(GaimAccount *account) +{ + GList *l; + + g_return_if_fail(account != NULL); + + gaim_debug_info("account", "Destroying account %p\n", account); + + for (l = gaim_get_conversations(); l != NULL; l = l->next) + { + GaimConversation *conv = (GaimConversation *)l->data; + + if (gaim_conversation_get_account(conv) == account) + gaim_conversation_set_account(conv, NULL); + } + + g_free(account->username); + g_free(account->alias); + g_free(account->password); + g_free(account->user_info); + g_free(account->protocol_id); + + g_hash_table_destroy(account->settings); + g_hash_table_destroy(account->ui_settings); + + gaim_account_set_status_types(account, NULL); + + gaim_presence_destroy(account->presence); + + if(account->system_log) + gaim_log_free(account->system_log); + + GAIM_DBUS_UNREGISTER_POINTER(account); + g_free(account); +} + +void +gaim_account_register(GaimAccount *account) +{ + g_return_if_fail(account != NULL); + + gaim_debug_info("account", "Registering account %s\n", + gaim_account_get_username(account)); + + gaim_connection_new(account, TRUE, NULL); +} + +static void +request_password_ok_cb(GaimAccount *account, GaimRequestFields *fields) +{ + const char *entry; + gboolean remember; + + entry = gaim_request_fields_get_string(fields, "password"); + remember = gaim_request_fields_get_bool(fields, "remember"); + + if (!entry || !*entry) + { + gaim_notify_error(account, NULL, _("Password is required to sign on."), NULL); + return; + } + + if(remember) + gaim_account_set_remember_password(account, TRUE); + + gaim_account_set_password(account, entry); + + gaim_connection_new(account, FALSE, entry); +} + +static void +request_password(GaimAccount *account) +{ + gchar *primary; + const gchar *username; + GaimRequestFieldGroup *group; + GaimRequestField *field; + GaimRequestFields *fields; + + /* Close any previous password request windows */ + gaim_request_close_with_handle(account); + + username = gaim_account_get_username(account); + primary = g_strdup_printf(_("Enter password for %s (%s)"), username, + gaim_account_get_protocol_name(account)); + + fields = gaim_request_fields_new(); + group = gaim_request_field_group_new(NULL); + gaim_request_fields_add_group(fields, group); + + field = gaim_request_field_string_new("password", _("Enter Password"), NULL, FALSE); + gaim_request_field_string_set_masked(field, TRUE); + gaim_request_field_set_required(field, TRUE); + gaim_request_field_group_add_field(group, field); + + field = gaim_request_field_bool_new("remember", _("Save password"), FALSE); + gaim_request_field_group_add_field(group, field); + + gaim_request_fields(account, + NULL, + primary, + NULL, + fields, + _("OK"), G_CALLBACK(request_password_ok_cb), + _("Cancel"), NULL, + account); + g_free(primary); +} + +void +gaim_account_connect(GaimAccount *account) +{ + GaimPlugin *prpl; + GaimPluginProtocolInfo *prpl_info; + const char *password; + + g_return_if_fail(account != NULL); + + gaim_debug_info("account", "Connecting to account %s\n", + gaim_account_get_username(account)); + + if (!gaim_account_get_enabled(account, gaim_core_get_ui())) + return; + + prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); + if (prpl == NULL) + { + gchar *message; + + message = g_strdup_printf(_("Missing protocol plugin for %s"), + gaim_account_get_username(account)); + gaim_notify_error(account, _("Connection Error"), message, NULL); + g_free(message); + return; + } + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); + password = gaim_account_get_password(account); + if ((password == NULL) && + !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && + !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) + request_password(account); + else + gaim_connection_new(account, FALSE, password); +} + +void +gaim_account_disconnect(GaimAccount *account) +{ + GaimConnection *gc; + + g_return_if_fail(account != NULL); + g_return_if_fail(!gaim_account_is_disconnected(account)); + + gaim_debug_info("account", "Disconnecting account %p\n", account); + + account->disconnecting = TRUE; + + gc = gaim_account_get_connection(account); + gaim_connection_destroy(gc); + if (!gaim_account_get_remember_password(account)) + gaim_account_set_password(account, NULL); + gaim_account_set_connection(account, NULL); + + account->disconnecting = FALSE; +} + +void +gaim_account_notify_added(GaimAccount *account, const char *remote_user, + const char *id, const char *alias, + const char *message) +{ + GaimAccountUiOps *ui_ops; + + g_return_if_fail(account != NULL); + g_return_if_fail(remote_user != NULL); + + ui_ops = gaim_accounts_get_ui_ops(); + + if (ui_ops != NULL && ui_ops->notify_added != NULL) + ui_ops->notify_added(account, remote_user, id, alias, message); +} + +void +gaim_account_request_add(GaimAccount *account, const char *remote_user, + const char *id, const char *alias, + const char *message) +{ + GaimAccountUiOps *ui_ops; + + g_return_if_fail(account != NULL); + g_return_if_fail(remote_user != NULL); + + ui_ops = gaim_accounts_get_ui_ops(); + + if (ui_ops != NULL && ui_ops->request_add != NULL) + ui_ops->request_add(account, remote_user, id, alias, message); +} + +static void +change_password_cb(GaimAccount *account, GaimRequestFields *fields) +{ + const char *orig_pass, *new_pass_1, *new_pass_2; + + orig_pass = gaim_request_fields_get_string(fields, "password"); + new_pass_1 = gaim_request_fields_get_string(fields, "new_password_1"); + new_pass_2 = gaim_request_fields_get_string(fields, "new_password_2"); + + if (g_utf8_collate(new_pass_1, new_pass_2)) + { + gaim_notify_error(account, NULL, + _("New passwords do not match."), NULL); + + return; + } + + if (orig_pass == NULL || new_pass_1 == NULL || new_pass_2 == NULL || + *orig_pass == '\0' || *new_pass_1 == '\0' || *new_pass_2 == '\0') + { + gaim_notify_error(account, NULL, + _("Fill out all fields completely."), NULL); + return; + } + + gaim_account_change_password(account, orig_pass, new_pass_1); +} + +void +gaim_account_request_change_password(GaimAccount *account) +{ + GaimRequestFields *fields; + GaimRequestFieldGroup *group; + GaimRequestField *field; + char primary[256]; + + g_return_if_fail(account != NULL); + g_return_if_fail(gaim_account_is_connected(account)); + + fields = gaim_request_fields_new(); + + group = gaim_request_field_group_new(NULL); + gaim_request_fields_add_group(fields, group); + + field = gaim_request_field_string_new("password", _("Original password"), + NULL, FALSE); + gaim_request_field_string_set_masked(field, TRUE); + gaim_request_field_set_required(field, TRUE); + gaim_request_field_group_add_field(group, field); + + field = gaim_request_field_string_new("new_password_1", + _("New password"), + NULL, FALSE); + gaim_request_field_string_set_masked(field, TRUE); + gaim_request_field_set_required(field, TRUE); + gaim_... [truncated message content] |
From: <ev...@us...> - 2006-08-19 01:30:35
|
Revision: 16858 Author: evands Date: 2006-08-18 18:29:53 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16858&view=rev Log Message: ----------- ** Part 4 of a 4 part commit ** Restructured the tree and the build files for the core/UI split. libgaim is now built as a library against which gtkgaim and gntgaim link and can be built separately from them by configuring with them disable d (--disable-gtkgaim and --disable-gntgaim). Each of the three source trees (gtk, console, and core) has its own plugins folder. This works nicely on my system; hopefully it won't cause too much chaos for others. If you have local changes, an easy way to merge them to the new layout should be along the lines of svn diff -r version_before_move > myChanges.diff patch -p1 < myChanges.diff where svn diff is done from the gaim checkout root but patch is done from gtk or core (or both). This changeset combines work by Sadrul Chowdhury, Gary Kramlich (grim), and me. Known issues: * On my system, at least, something's not quite right with the gtkgaim build process; it imports gtkgaim.h (as can be seen by adding a #warning) but <gtk/gtk.h> doesn't seem to be used. The GTK_STOCK_XXX defines claim to be undeclared. I was going to make this work before committing, but I strongly suspect someone with more autotools experience will be able to fix it easily whereas I've already glared at it for an hour. * The gnt console UI depends on libgnt, which is not yet automatically built. Either autogen.sh && make && make install libgnt (in console/libgnt) or configure with --disable-gnt for now. * The Windows build process has not been touched yet so still needs updating. * There's an stray "rm: core: is a directory" warning after autogen.sh is compl te. I'm not sure where that's coming from. Modified Paths: -------------- trunk/Makefile.am trunk/configure.ac Added Paths: ----------- trunk/gtk/win32/ Removed Paths: ------------- trunk/src/account.c trunk/src/account.h trunk/src/accountopt.c trunk/src/accountopt.h trunk/src/blist.c trunk/src/blist.h trunk/src/buddyicon.c trunk/src/buddyicon.h trunk/src/cipher.c trunk/src/cipher.h trunk/src/circbuffer.c trunk/src/circbuffer.h trunk/src/cmds.c trunk/src/cmds.h trunk/src/connection.c trunk/src/connection.h trunk/src/conversation.c trunk/src/conversation.h trunk/src/core.c trunk/src/core.h trunk/src/dbus-analyze-functions.py trunk/src/dbus-analyze-types.py trunk/src/dbus-bindings.h trunk/src/dbus-define-api.h trunk/src/dbus-gaim.h trunk/src/dbus-gaim.service trunk/src/dbus-maybe.h trunk/src/dbus-server.c trunk/src/dbus-server.h trunk/src/dbus-useful.c trunk/src/dbus-useful.h trunk/src/debug.c trunk/src/debug.h trunk/src/desktopitem.c trunk/src/desktopitem.h trunk/src/dnsquery.c trunk/src/dnsquery.h trunk/src/dnssrv.c trunk/src/dnssrv.h trunk/src/eventloop.c trunk/src/eventloop.h trunk/src/ft.c trunk/src/ft.h trunk/src/gaim-client-example.c trunk/src/gaim-client.c trunk/src/gaim-client.h trunk/src/gaim-notifications-example trunk/src/gaim-remote trunk/src/gaim-send trunk/src/gaim-send-async trunk/src/gaim.h trunk/src/getopt.c trunk/src/getopt.h trunk/src/getopt1.c trunk/src/gtkaccount.c trunk/src/gtkaccount.h trunk/src/gtkblist.c trunk/src/gtkblist.h trunk/src/gtkcelllayout.c trunk/src/gtkcelllayout.h trunk/src/gtkcellrendererprogress.c trunk/src/gtkcellrendererprogress.h trunk/src/gtkcellview.c trunk/src/gtkcellview.h trunk/src/gtkcellviewmenuitem.c trunk/src/gtkcellviewmenuitem.h trunk/src/gtkcombobox.c trunk/src/gtkcombobox.h trunk/src/gtkconn.c trunk/src/gtkconn.h trunk/src/gtkconv.c trunk/src/gtkconv.h trunk/src/gtkconvwin.h trunk/src/gtkdebug.c trunk/src/gtkdebug.h trunk/src/gtkdialogs.c trunk/src/gtkdialogs.h trunk/src/gtkdnd-hints.c trunk/src/gtkdnd-hints.h trunk/src/gtkeventloop.c trunk/src/gtkeventloop.h trunk/src/gtkexpander.c trunk/src/gtkexpander.h trunk/src/gtkft.c trunk/src/gtkft.h trunk/src/gtkgaim.h trunk/src/gtkidle.c trunk/src/gtkidle.h trunk/src/gtkimhtml.c trunk/src/gtkimhtml.h trunk/src/gtkimhtmltoolbar.c trunk/src/gtkimhtmltoolbar.h trunk/src/gtklog.c trunk/src/gtklog.h trunk/src/gtkmain.c trunk/src/gtkmenutray.c trunk/src/gtkmenutray.h trunk/src/gtknickcolors.h trunk/src/gtknotify.c trunk/src/gtknotify.h trunk/src/gtkplugin.c trunk/src/gtkplugin.h trunk/src/gtkpluginpref.c trunk/src/gtkpluginpref.h trunk/src/gtkpounce.c trunk/src/gtkpounce.h trunk/src/gtkprefs.c trunk/src/gtkprefs.h trunk/src/gtkprivacy.c trunk/src/gtkprivacy.h trunk/src/gtkrequest.c trunk/src/gtkrequest.h trunk/src/gtkroomlist.c trunk/src/gtkroomlist.h trunk/src/gtksavedstatuses.c trunk/src/gtksavedstatuses.h trunk/src/gtksession.c trunk/src/gtksession.h trunk/src/gtksound.c trunk/src/gtksound.h trunk/src/gtksourceiter.c trunk/src/gtksourceiter.h trunk/src/gtkstatusbox.c trunk/src/gtkstatusbox.h trunk/src/gtkstock.c trunk/src/gtkstock.h trunk/src/gtkthemes.c trunk/src/gtkthemes.h trunk/src/gtkutils.c trunk/src/gtkutils.h trunk/src/gtkwhiteboard.c trunk/src/gtkwhiteboard.h trunk/src/idle.c trunk/src/idle.h trunk/src/imgstore.c trunk/src/imgstore.h trunk/src/internal.h trunk/src/log.c trunk/src/log.h trunk/src/mime.c trunk/src/mime.h trunk/src/network.c trunk/src/network.h trunk/src/notify.c trunk/src/notify.h trunk/src/ntlm.c trunk/src/ntlm.h trunk/src/plugin.c trunk/src/plugin.h trunk/src/pluginpref.c trunk/src/pluginpref.h trunk/src/pounce.c trunk/src/pounce.h trunk/src/prefix.c trunk/src/prefix.h trunk/src/prefs.c trunk/src/prefs.h trunk/src/privacy.c trunk/src/privacy.h trunk/src/protocols/ trunk/src/proxy.c trunk/src/proxy.h trunk/src/prpl.c trunk/src/prpl.h trunk/src/request.c trunk/src/request.h trunk/src/roomlist.c trunk/src/roomlist.h trunk/src/savedstatuses.c trunk/src/savedstatuses.h trunk/src/server.c trunk/src/server.h trunk/src/signals.c trunk/src/signals.h trunk/src/sound.c trunk/src/sound.h trunk/src/sslconn.c trunk/src/sslconn.h trunk/src/status.c trunk/src/status.h trunk/src/stringref.c trunk/src/stringref.h trunk/src/stun.c trunk/src/stun.h trunk/src/upnp.c trunk/src/upnp.h trunk/src/util.c trunk/src/util.h trunk/src/value.c trunk/src/value.h trunk/src/version.h trunk/src/whiteboard.c trunk/src/whiteboard.h trunk/src/win32/ trunk/src/win_gaim.c trunk/src/xmlnode.c trunk/src/xmlnode.h Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2006-08-19 01:19:33 UTC (rev 16857) +++ trunk/Makefile.am 2006-08-19 01:29:53 UTC (rev 16858) @@ -48,8 +48,16 @@ apps_DATA = $(apps_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ -SUBDIRS = doc m4macros pixmaps plugins po sounds src +if ENABLE_GTK +GTK_DIR=gtk +endif +if ENABLE_GNT +GNT_DIR=console +endif + +SUBDIRS = core doc $(GNT_DIR) $(GTK_DIR) m4macros po + docs: Doxyfile if HAVE_DOXYGEN @echo "Running doxygen..." Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-08-19 01:19:33 UTC (rev 16857) +++ trunk/configure.ac 2006-08-19 01:29:53 UTC (rev 16858) @@ -527,6 +527,8 @@ AC_ARG_WITH(tkconfig, [ --with-tkconfig=DIR directory containing tkConfig.sh]) AC_ARG_ENABLE(gtkspell, [ --disable-gtkspell compile without GtkSpell automatic spell checking],,enable_gtkspell=yes) AC_ARG_ENABLE(debug, [ --enable-debug compile with debugging support],,enable_debug=no) +AC_ARG_ENABLE(gtkgaim, [ --disable-gtkgaim compile without GtkGaim client],,enable_gtk=yes) +AC_ARG_ENABLE(gntgaim, [ --disable-gntgaim compile without GntGaim console client],,enable_gnt=yes) AC_ARG_ENABLE(fatal-asserts, [ --enable-fatal-asserts make assertions fatal (useful for debugging)],,enable_fatal_asserts=no) dnl We know Gaim won't compile with deprecated APIs disabled. dnl We have no desire to support two different versions of the @@ -633,19 +635,37 @@ fi AC_SUBST(CFLAGS) -AM_PATH_GLIB_2_0(2.0.0,,AC_MSG_ERROR([ +PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.0.0 gobject-2.0 gmodule-2.0 gthread-2.0], + [ + AC_SUBST(GLIB_CFLAGS) + AC_SUBST(GLIB_LIBS) + ], + [ + AC_MSG_ERROR([ *** GLib 2.0 is required to build Gaim; please make sure you have the GLib *** development headers installed. The latest version of GLib is -*** always available at http://www.gtk.org/.]),gthread) -AM_PATH_GTK_2_0(2.0.0,,AC_MSG_ERROR([ -*** GTK+ 2.0 is required to build Gaim; please make sure you have the GTK+ -*** development headers installed. The latest version of GTK+ is -*** always available at http://www.gtk.org/.])) +*** always available at http://www.gtk.org/.]) + ]) AC_PATH_PROG(gaimpath, gaim) -AC_SUBST(GTK_CFLAGS) -AC_SUBST(GLIB_CFLAGS) +if test "$enable_gtk" = yes ; then + PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.0.0], + [ + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + ], + [ + AC_MSG_ERROR([ +*** GTK+ 2.0 is required to build Gaim. please make sure you have the GTK+ +*** development headers installed. The latest version of GTK+ is +*** always available at http://www.gtk.org/. +*** +*** If you wish to build just gntgaim or libgaim, +*** configure with --disable-gtkgaim]) + ]) +fi + AC_PATH_XTRA # We can't assume that $x_libraries will be set, because autoconf does not # set it in the case when the X libraries are in a standard place. @@ -784,6 +804,33 @@ AM_CONDITIONAL(ENABLE_DBUS, test "x$enable_dbus" = "xyes") dnl ####################################################################### +dnl # GNT Gaim +dnl ####################################################################### +AM_CONDITIONAL(ENABLE_GNT, test "x$enable_gnt" = "xyes") + +dnl ####################################################################### +dnl # Look for startup-notification, evolution integration, X-libraries, +dnl # XScreenSaver, X session management, GtkSpell only if GTK+ was found +dnl ####################################################################### + +if test "x$enable_gtk" = "xyes"; then + +AC_PATH_XTRA +# We can't assume that $x_libraries will be set, because autoconf does not +# set it in the case when the X libraries are in a standard place. +# Ditto for $x_includes +if test X"$x_libraries" = X"" || test X"$x_libraries" = XNONE; then + x_libpath_add= +else + x_libpath_add="-L$x_libraries" +fi +if test X"$x_includes" = X"" || test X"$x_includes" = XNONE; then + x_incpath_add= +else + x_incpath_add="-I$x_includes" +fi + +dnl ####################################################################### dnl # Check for startup notification dnl ####################################################################### AC_ARG_ENABLE(startup-notification, [AC_HELP_STRING([--disable-startup-notification], [compile without startup notification support])], , enable_startup_notification=yes) @@ -803,7 +850,6 @@ AC_SUBST(STARTUP_NOTIFICATION_LIBS) fi - dnl ####################################################################### dnl # Check for stuff needed by the evolution integration plugin. dnl ####################################################################### @@ -834,8 +880,6 @@ AC_SUBST(EVOLUTION_ADDRESSBOOK_LIBS) fi -AM_CONDITIONAL(BUILD_GEVOLUTION, test "x$build_gevo" = "xyes") - dnl ####################################################################### dnl # Check for XScreenSaver dnl ####################################################################### @@ -889,7 +933,6 @@ AC_DEFINE(USE_SM, 1, [Define if we're using X Session Management.]) fi - AC_DEFUN([GC_TM_GMTOFF], [AC_REQUIRE([AC_STRUCT_TM])dnl AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff, @@ -901,6 +944,30 @@ fi ]) +dnl Thanks, Evan. +if test "$enable_gtkspell" = yes ; then + PKG_CHECK_MODULES(GTKSPELL, gtkspell-2.0 >= 2.0.2, [], [ + AC_MSG_RESULT(no) + enable_gtkspell=no + ]) + if test "$enable_gtkspell" = "yes" ; then + AC_SUBST(GTKSPELL_CFLAGS) + AC_SUBST(GTKSPELL_LIBS) + AC_DEFINE(USE_GTKSPELL,,[do we have gtkspell?]) + fi +fi +else # GTK + enable_gevolution=no + enable_sm=no + enable_xss=no + enable_startup_notification=no + enable_gtkspell=no +fi # GTK + +AM_CONDITIONAL(ENABLE_GTK, test "x$enable_gtk" = "xyes") + +AM_CONDITIONAL(BUILD_GEVOLUTION, test "x$build_gevo" = "xyes") + GC_TM_GMTOFF dnl ####################################################################### @@ -943,6 +1010,7 @@ AC_SUBST(MONO_LIBS) AM_CONDITIONAL(USE_MONO, test x"$enable_mono" = x"yes") +if test "x$enable_gtk" = "xyes"; then # This is for now, since perl still requires GTK+ dnl ####################################################################### dnl # Check for Perl support dnl ####################################################################### @@ -950,6 +1018,10 @@ enable_perl=no fi +else # GTK + enable_perl=no +fi # GTK + if test "$enable_perl" = yes ; then AC_PATH_PROG(perlpath, perl) AC_MSG_CHECKING(for Perl compile flags) @@ -1566,19 +1638,6 @@ AM_CONDITIONAL(USE_TK, false) fi -dnl Thanks, Evan. -if test "$enable_gtkspell" = yes ; then - PKG_CHECK_MODULES(GTKSPELL, gtkspell-2.0 >= 2.0.2, [], [ - AC_MSG_RESULT(no) - enable_gtkspell=no - ]) - if test "$enable_gtkspell" = "yes" ; then - AC_SUBST(GTKSPELL_CFLAGS) - AC_SUBST(GTKSPELL_LIBS) - AC_DEFINE(USE_GTKSPELL,,[do we have gtkspell?]) - fi -fi - if test "$ac_cv_cygwin" = yes ; then LDADD="$LDADD -static" AC_DEFINE(DEBUG, 1, [Define if debugging is enabled.]) @@ -1748,43 +1807,47 @@ doc/gaim.1 doc/gntgaim.1 m4macros/Makefile - pixmaps/Makefile - pixmaps/smileys/Makefile - pixmaps/smileys/default/Makefile - pixmaps/smileys/none/Makefile - pixmaps/status/Makefile - pixmaps/status/default/Makefile - plugins/Makefile - plugins/docklet/Makefile - plugins/gevolution/Makefile - plugins/gestures/Makefile - plugins/mono/Makefile - plugins/mono/api/Makefile - plugins/mono/loader/Makefile - plugins/musicmessaging/Makefile - plugins/perl/Makefile - plugins/perl/common/Makefile.PL - plugins/ssl/Makefile - plugins/tcl/Makefile - plugins/ticker/Makefile + gtk/Makefile + gtk/pixmaps/Makefile + gtk/pixmaps/smileys/Makefile + gtk/pixmaps/smileys/default/Makefile + gtk/pixmaps/smileys/none/Makefile + gtk/pixmaps/status/Makefile + gtk/pixmaps/status/default/Makefile + gtk/plugins/Makefile + gtk/plugins/docklet/Makefile + gtk/plugins/gevolution/Makefile + gtk/plugins/gestures/Makefile + gtk/plugins/musicmessaging/Makefile + gtk/sounds/Makefile + gtk/plugins/ticker/Makefile + core/plugins/Makefile + core/plugins/mono/Makefile + core/plugins/mono/api/Makefile + core/plugins/mono/loader/Makefile + core/plugins/perl/Makefile + core/plugins/perl/common/Makefile.PL + core/plugins/ssl/Makefile + core/plugins/tcl/Makefile + core/Makefile + core/protocols/Makefile + core/protocols/bonjour/Makefile + core/protocols/gg/Makefile + core/protocols/irc/Makefile + core/protocols/jabber/Makefile + core/protocols/msn/Makefile + core/protocols/novell/Makefile + core/protocols/oscar/Makefile + core/protocols/qq/Makefile + core/protocols/sametime/Makefile + core/protocols/silc/Makefile + core/protocols/simple/Makefile + core/protocols/toc/Makefile + core/protocols/yahoo/Makefile + core/protocols/zephyr/Makefile + console/Makefile + console/plugins/Makefile po/Makefile.in - sounds/Makefile - src/Makefile - src/protocols/Makefile - src/protocols/bonjour/Makefile - src/protocols/gg/Makefile - src/protocols/irc/Makefile - src/protocols/jabber/Makefile - src/protocols/msn/Makefile - src/protocols/novell/Makefile - src/protocols/oscar/Makefile - src/protocols/qq/Makefile - src/protocols/sametime/Makefile - src/protocols/silc/Makefile - src/protocols/simple/Makefile - src/protocols/toc/Makefile - src/protocols/yahoo/Makefile - src/protocols/zephyr/Makefile gaim.pc gaim.spec ]) @@ -1797,7 +1860,12 @@ echo Protocols to link statically.. : $STATIC_PRPLS echo Protocols to build dynamically : $DYNAMIC_PRPLS echo -echo UI Library.................... : GTK+ 2.x +if test "x$enable_gtk" = "xyes" ; then +echo GTK UI Library................ : GTK+ 2.x +else +echo GTK UI Library................ : None +fi +echo Build with GNT Console UI..... : $enable_gnt echo SSL Library/Libraries......... : $msg_ssl echo echo Build with GStreamer support.. : $enable_gst @@ -1808,7 +1876,7 @@ echo Build with Tk support......... : $enable_tk echo Build with GtkSpell support... : $enable_gtkspell echo Build with DBUS support....... : $enable_dbus -if test x$enable_dbus = xyes ; then +if test "x$enable_dbus" = "xyes" ; then eval echo DBUS servies directory........ : $DBUS_SERVICES_DIR fi echo Build with Cyrus SASL support. : $enable_cyrus_sasl Copied: trunk/gtk/win32 (from rev 16857, trunk/src/win32) Deleted: trunk/src/account.c =================================================================== --- trunk/src/account.c 2006-08-19 01:19:33 UTC (rev 16857) +++ trunk/src/account.c 2006-08-19 01:29:53 UTC (rev 16858) @@ -1,2364 +0,0 @@ -/** - * @file account.c Account API - * @ingroup core - * - * gaim - * - * Gaim is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#include "internal.h" -#include "account.h" -#include "core.h" -#include "dbus-maybe.h" -#include "debug.h" -#include "notify.h" -#include "pounce.h" -#include "prefs.h" -#include "privacy.h" -#include "prpl.h" -#include "request.h" -#include "server.h" -#include "signals.h" -#include "status.h" -#include "util.h" -#include "xmlnode.h" - -/* TODO: Should use GaimValue instead of this? What about "ui"? */ -typedef struct -{ - GaimPrefType type; - - char *ui; - - union - { - int integer; - char *string; - gboolean bool; - - } value; - -} GaimAccountSetting; - - -static GaimAccountUiOps *account_ui_ops = NULL; - -static GList *accounts = NULL; -static guint save_timer = 0; -static gboolean accounts_loaded = FALSE; - - -/********************************************************************* - * Writing to disk * - *********************************************************************/ - -static void -setting_to_xmlnode(gpointer key, gpointer value, gpointer user_data) -{ - const char *name; - GaimAccountSetting *setting; - xmlnode *node, *child; - char buf[20]; - - name = (const char *)key; - setting = (GaimAccountSetting *)value; - node = (xmlnode *)user_data; - - child = xmlnode_new_child(node, "setting"); - xmlnode_set_attrib(child, "name", name); - - if (setting->type == GAIM_PREF_INT) { - xmlnode_set_attrib(child, "type", "int"); - snprintf(buf, sizeof(buf), "%d", setting->value.integer); - xmlnode_insert_data(child, buf, -1); - } - else if (setting->type == GAIM_PREF_STRING && setting->value.string != NULL) { - xmlnode_set_attrib(child, "type", "string"); - xmlnode_insert_data(child, setting->value.string, -1); - } - else if (setting->type == GAIM_PREF_BOOLEAN) { - xmlnode_set_attrib(child, "type", "bool"); - snprintf(buf, sizeof(buf), "%d", setting->value.bool); - xmlnode_insert_data(child, buf, -1); - } -} - -static void -ui_setting_to_xmlnode(gpointer key, gpointer value, gpointer user_data) -{ - const char *ui; - GHashTable *table; - xmlnode *node, *child; - - ui = (const char *)key; - table = (GHashTable *)value; - node = (xmlnode *)user_data; - - if (g_hash_table_size(table) > 0) - { - child = xmlnode_new_child(node, "settings"); - xmlnode_set_attrib(child, "ui", ui); - g_hash_table_foreach(table, setting_to_xmlnode, child); - } -} - -static xmlnode * -status_attr_to_xmlnode(const GaimStatus *status, const GaimStatusType *type, const GaimStatusAttr *attr) -{ - xmlnode *node; - const char *id; - char *value = NULL; - GaimStatusAttr *default_attr; - GaimValue *default_value; - GaimType attr_type; - GaimValue *attr_value; - - id = gaim_status_attr_get_id(attr); - g_return_val_if_fail(id, NULL); - - attr_value = gaim_status_get_attr_value(status, id); - g_return_val_if_fail(attr_value, NULL); - attr_type = gaim_value_get_type(attr_value); - - /* - * If attr_value is a different type than it should be - * then don't write it to the file. - */ - default_attr = gaim_status_type_get_attr(type, id); - default_value = gaim_status_attr_get_value(default_attr); - if (attr_type != gaim_value_get_type(default_value)) - return NULL; - - /* - * If attr_value is the same as the default for this status - * then there is no need to write it to the file. - */ - if (attr_type == GAIM_TYPE_STRING) - { - const char *string_value = gaim_value_get_string(attr_value); - const char *default_string_value = gaim_value_get_string(default_value); - if (((string_value == NULL) && (default_string_value == NULL)) || - ((string_value != NULL) && (default_string_value != NULL) && - !strcmp(string_value, default_string_value))) - return NULL; - value = g_strdup(gaim_value_get_string(attr_value)); - } - else if (attr_type == GAIM_TYPE_INT) - { - int int_value = gaim_value_get_int(attr_value); - if (int_value == gaim_value_get_int(default_value)) - return NULL; - value = g_strdup_printf("%d", int_value); - } - else if (attr_type == GAIM_TYPE_BOOLEAN) - { - gboolean boolean_value = gaim_value_get_boolean(attr_value); - if (boolean_value == gaim_value_get_boolean(default_value)) - return NULL; - value = g_strdup(boolean_value ? - "true" : "false"); - } - else - { - return NULL; - } - - g_return_val_if_fail(value, NULL); - - node = xmlnode_new("attribute"); - - xmlnode_set_attrib(node, "id", id); - xmlnode_set_attrib(node, "value", value); - - g_free(value); - - return node; -} - -static xmlnode * -status_attrs_to_xmlnode(const GaimStatus *status) -{ - GaimStatusType *type = gaim_status_get_type(status); - xmlnode *node, *child; - const GList *attrs, *attr; - - node = xmlnode_new("attributes"); - - attrs = gaim_status_type_get_attrs(type); - for (attr = attrs; attr != NULL; attr = attr->next) - { - child = status_attr_to_xmlnode(status, type, (const GaimStatusAttr *)attr->data); - if (child) - xmlnode_insert_child(node, child); - } - - return node; -} - -static xmlnode * -status_to_xmlnode(const GaimStatus *status) -{ - xmlnode *node, *child; - - node = xmlnode_new("status"); - xmlnode_set_attrib(node, "type", gaim_status_get_id(status)); - if (gaim_status_get_name(status) != NULL) - xmlnode_set_attrib(node, "name", gaim_status_get_name(status)); - xmlnode_set_attrib(node, "active", gaim_status_is_active(status) ? "true" : "false"); - - child = status_attrs_to_xmlnode(status); - xmlnode_insert_child(node, child); - - return node; -} - -static xmlnode * -statuses_to_xmlnode(const GaimPresence *presence) -{ - xmlnode *node, *child; - const GList *statuses, *status; - - node = xmlnode_new("statuses"); - - statuses = gaim_presence_get_statuses(presence); - for (status = statuses; status != NULL; status = status->next) - { - child = status_to_xmlnode((GaimStatus *)status->data); - xmlnode_insert_child(node, child); - } - - return node; -} - -static xmlnode * -proxy_settings_to_xmlnode(GaimProxyInfo *proxy_info) -{ - xmlnode *node, *child; - GaimProxyType proxy_type; - const char *value; - int int_value; - char buf[20]; - - proxy_type = gaim_proxy_info_get_type(proxy_info); - - node = xmlnode_new("proxy"); - - child = xmlnode_new_child(node, "type"); - xmlnode_insert_data(child, - (proxy_type == GAIM_PROXY_USE_GLOBAL ? "global" : - proxy_type == GAIM_PROXY_NONE ? "none" : - proxy_type == GAIM_PROXY_HTTP ? "http" : - proxy_type == GAIM_PROXY_SOCKS4 ? "socks4" : - proxy_type == GAIM_PROXY_SOCKS5 ? "socks5" : - proxy_type == GAIM_PROXY_USE_ENVVAR ? "envvar" : "unknown"), -1); - - if (proxy_type != GAIM_PROXY_USE_GLOBAL && - proxy_type != GAIM_PROXY_NONE && - proxy_type != GAIM_PROXY_USE_ENVVAR) - { - if ((value = gaim_proxy_info_get_host(proxy_info)) != NULL) - { - child = xmlnode_new_child(node, "host"); - xmlnode_insert_data(child, value, -1); - } - - if ((int_value = gaim_proxy_info_get_port(proxy_info)) != 0) - { - snprintf(buf, sizeof(buf), "%d", int_value); - child = xmlnode_new_child(node, "port"); - xmlnode_insert_data(child, buf, -1); - } - - if ((value = gaim_proxy_info_get_username(proxy_info)) != NULL) - { - child = xmlnode_new_child(node, "username"); - xmlnode_insert_data(child, value, -1); - } - - if ((value = gaim_proxy_info_get_password(proxy_info)) != NULL) - { - child = xmlnode_new_child(node, "password"); - xmlnode_insert_data(child, value, -1); - } - } - - return node; -} - -static xmlnode * -account_to_xmlnode(GaimAccount *account) -{ - xmlnode *node, *child; - const char *tmp; - GaimPresence *presence; - GaimProxyInfo *proxy_info; - - node = xmlnode_new("account"); - - child = xmlnode_new_child(node, "protocol"); - xmlnode_insert_data(child, gaim_account_get_protocol_id(account), -1); - - child = xmlnode_new_child(node, "name"); - xmlnode_insert_data(child, gaim_account_get_username(account), -1); - - if (gaim_account_get_remember_password(account) && - ((tmp = gaim_account_get_password(account)) != NULL)) - { - child = xmlnode_new_child(node, "password"); - xmlnode_insert_data(child, tmp, -1); - } - - if ((tmp = gaim_account_get_alias(account)) != NULL) - { - child = xmlnode_new_child(node, "alias"); - xmlnode_insert_data(child, tmp, -1); - } - - if ((presence = gaim_account_get_presence(account)) != NULL) - { - child = statuses_to_xmlnode(presence); - xmlnode_insert_child(node, child); - } - - if ((tmp = gaim_account_get_user_info(account)) != NULL) - { - /* TODO: Do we need to call gaim_str_strip_char(tmp, '\r') here? */ - child = xmlnode_new_child(node, "userinfo"); - xmlnode_insert_data(child, tmp, -1); - } - - if ((tmp = gaim_account_get_buddy_icon(account)) != NULL) - { - child = xmlnode_new_child(node, "buddyicon"); - xmlnode_insert_data(child, tmp, -1); - } - - if (g_hash_table_size(account->settings) > 0) - { - child = xmlnode_new_child(node, "settings"); - g_hash_table_foreach(account->settings, setting_to_xmlnode, child); - } - - if (g_hash_table_size(account->ui_settings) > 0) - { - g_hash_table_foreach(account->ui_settings, ui_setting_to_xmlnode, node); - } - - if ((proxy_info = gaim_account_get_proxy_info(account)) != NULL) - { - child = proxy_settings_to_xmlnode(proxy_info); - xmlnode_insert_child(node, child); - } - - return node; -} - -static xmlnode * -accounts_to_xmlnode(void) -{ - xmlnode *node, *child; - GList *cur; - - node = xmlnode_new("account"); - xmlnode_set_attrib(node, "version", "1.0"); - - for (cur = gaim_accounts_get_all(); cur != NULL; cur = cur->next) - { - child = account_to_xmlnode(cur->data); - xmlnode_insert_child(node, child); - } - - return node; -} - -static void -sync_accounts(void) -{ - xmlnode *node; - char *data; - - if (!accounts_loaded) - { - gaim_debug_error("account", "Attempted to save accounts before " - "they were read!\n"); - return; - } - - node = accounts_to_xmlnode(); - data = xmlnode_to_formatted_str(node, NULL); - gaim_util_write_data_to_file("accounts.xml", data, -1); - g_free(data); - xmlnode_free(node); -} - -static gboolean -save_cb(gpointer data) -{ - sync_accounts(); - save_timer = 0; - return FALSE; -} - -static void -schedule_accounts_save() -{ - if (save_timer == 0) - save_timer = gaim_timeout_add(5000, save_cb, NULL); -} - - -/********************************************************************* - * Reading from disk * - *********************************************************************/ - -static void -parse_settings(xmlnode *node, GaimAccount *account) -{ - const char *ui; - xmlnode *child; - - /* Get the UI string, if these are UI settings */ - ui = xmlnode_get_attrib(node, "ui"); - - /* Read settings, one by one */ - for (child = xmlnode_get_child(node, "setting"); child != NULL; - child = xmlnode_get_next_twin(child)) - { - const char *name, *str_type; - GaimPrefType type; - char *data; - - name = xmlnode_get_attrib(child, "name"); - if (name == NULL) - /* Ignore this setting */ - continue; - - str_type = xmlnode_get_attrib(child, "type"); - if (str_type == NULL) - /* Ignore this setting */ - continue; - - if (!strcmp(str_type, "string")) - type = GAIM_PREF_STRING; - else if (!strcmp(str_type, "int")) - type = GAIM_PREF_INT; - else if (!strcmp(str_type, "bool")) - type = GAIM_PREF_BOOLEAN; - else - /* Ignore this setting */ - continue; - - data = xmlnode_get_data(child); - if (data == NULL) - /* Ignore this setting */ - continue; - - if (ui == NULL) - { - if (type == GAIM_PREF_STRING) - gaim_account_set_string(account, name, data); - else if (type == GAIM_PREF_INT) - gaim_account_set_int(account, name, atoi(data)); - else if (type == GAIM_PREF_BOOLEAN) - gaim_account_set_bool(account, name, - (*data == '0' ? FALSE : TRUE)); - } else { - if (type == GAIM_PREF_STRING) - gaim_account_set_ui_string(account, ui, name, data); - else if (type == GAIM_PREF_INT) - gaim_account_set_ui_int(account, ui, name, atoi(data)); - else if (type == GAIM_PREF_BOOLEAN) - gaim_account_set_ui_bool(account, ui, name, - (*data == '0' ? FALSE : TRUE)); - } - - g_free(data); - } -} - -static GList * -parse_status_attrs(xmlnode *node, GaimStatus *status) -{ - GList *list = NULL; - xmlnode *child; - GaimValue *attr_value; - - for (child = xmlnode_get_child(node, "attribute"); child != NULL; - child = xmlnode_get_next_twin(child)) - { - const char *id = xmlnode_get_attrib(child, "id"); - const char *value = xmlnode_get_attrib(child, "value"); - - if (!id || !*id || !value || !*value) - continue; - - attr_value = gaim_status_get_attr_value(status, id); - if (!attr_value) - continue; - - list = g_list_append(list, (char *)id); - - switch (gaim_value_get_type(attr_value)) - { - case GAIM_TYPE_STRING: - list = g_list_append(list, (char *)value); - break; - case GAIM_TYPE_INT: - case GAIM_TYPE_BOOLEAN: - { - int v; - if (sscanf(value, "%d", &v) == 1) - list = g_list_append(list, GINT_TO_POINTER(v)); - else - list = g_list_remove(list, id); - break; - } - default: - break; - } - } - - return list; -} - -static void -parse_status(xmlnode *node, GaimAccount *account) -{ - gboolean active = FALSE; - const char *data; - const char *type; - xmlnode *child; - GList *attrs = NULL; - - /* Get the active/inactive state */ - data = xmlnode_get_attrib(node, "active"); - if (data == NULL) - return; - if (strcasecmp(data, "true") == 0) - active = TRUE; - else if (strcasecmp(data, "false") == 0) - active = FALSE; - else - return; - - /* Get the type of the status */ - type = xmlnode_get_attrib(node, "type"); - if (type == NULL) - return; - - /* Read attributes into a GList */ - child = xmlnode_get_child(node, "attributes"); - if (child != NULL) - { - attrs = parse_status_attrs(child, - gaim_account_get_status(account, type)); - } - - gaim_account_set_status_list(account, type, active, attrs); - - g_list_free(attrs); -} - -static void -parse_statuses(xmlnode *node, GaimAccount *account) -{ - xmlnode *child; - - for (child = xmlnode_get_child(node, "status"); child != NULL; - child = xmlnode_get_next_twin(child)) - { - parse_status(child, account); - } -} - -static void -parse_proxy_info(xmlnode *node, GaimAccount *account) -{ - GaimProxyInfo *proxy_info; - xmlnode *child; - char *data; - - proxy_info = gaim_proxy_info_new(); - - /* Use the global proxy settings, by default */ - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_USE_GLOBAL); - - /* Read proxy type */ - child = xmlnode_get_child(node, "type"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - if (!strcmp(data, "global")) - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_USE_GLOBAL); - else if (!strcmp(data, "none")) - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_NONE); - else if (!strcmp(data, "http")) - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_HTTP); - else if (!strcmp(data, "socks4")) - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_SOCKS4); - else if (!strcmp(data, "socks5")) - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_SOCKS5); - else if (!strcmp(data, "envvar")) - gaim_proxy_info_set_type(proxy_info, GAIM_PROXY_USE_ENVVAR); - else - { - gaim_debug_error("account", "Invalid proxy type found when " - "loading account information for %s\n", - gaim_account_get_username(account)); - } - g_free(data); - } - - /* Read proxy host */ - child = xmlnode_get_child(node, "host"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_proxy_info_set_host(proxy_info, data); - g_free(data); - } - - /* Read proxy port */ - child = xmlnode_get_child(node, "port"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_proxy_info_set_port(proxy_info, atoi(data)); - g_free(data); - } - - /* Read proxy username */ - child = xmlnode_get_child(node, "username"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_proxy_info_set_username(proxy_info, data); - g_free(data); - } - - /* Read proxy password */ - child = xmlnode_get_child(node, "password"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_proxy_info_set_password(proxy_info, data); - g_free(data); - } - - /* If there are no values set then proxy_infourn NULL */ - if ((gaim_proxy_info_get_type(proxy_info) == GAIM_PROXY_USE_GLOBAL) && - (gaim_proxy_info_get_host(proxy_info) == NULL) && - (gaim_proxy_info_get_port(proxy_info) == 0) && - (gaim_proxy_info_get_username(proxy_info) == NULL) && - (gaim_proxy_info_get_password(proxy_info) == NULL)) - { - gaim_proxy_info_destroy(proxy_info); - return; - } - - gaim_account_set_proxy_info(account, proxy_info); -} - -static GaimAccount * -parse_account(xmlnode *node) -{ - GaimAccount *ret; - xmlnode *child; - char *protocol_id = NULL; - char *name = NULL; - char *data; - - child = xmlnode_get_child(node, "protocol"); - if (child != NULL) - protocol_id = xmlnode_get_data(child); - - child = xmlnode_get_child(node, "name"); - if (child != NULL) - name = xmlnode_get_data(child); - if (name == NULL) - { - /* Do we really need to do this? */ - child = xmlnode_get_child(node, "username"); - if (child != NULL) - name = xmlnode_get_data(child); - } - - if ((protocol_id == NULL) || (name == NULL)) - { - g_free(protocol_id); - g_free(name); - return NULL; - } - - ret = gaim_account_new(name, protocol_id); - g_free(name); - g_free(protocol_id); - - /* Read the password */ - child = xmlnode_get_child(node, "password"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_account_set_remember_password(ret, TRUE); - gaim_account_set_password(ret, data); - g_free(data); - } - - /* Read the alias */ - child = xmlnode_get_child(node, "alias"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - if (*data != '\0') - gaim_account_set_alias(ret, data); - g_free(data); - } - - /* Read the statuses */ - child = xmlnode_get_child(node, "statuses"); - if (child != NULL) - { - parse_statuses(child, ret); - } - - /* Read the userinfo */ - child = xmlnode_get_child(node, "userinfo"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_account_set_user_info(ret, data); - g_free(data); - } - - /* Read the buddyicon */ - child = xmlnode_get_child(node, "buddyicon"); - if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) - { - gaim_account_set_buddy_icon(ret, data); - g_free(data); - } - - /* Read settings (both core and UI) */ - for (child = xmlnode_get_child(node, "settings"); child != NULL; - child = xmlnode_get_next_twin(child)) - { - parse_settings(child, ret); - } - - /* Read proxy */ - child = xmlnode_get_child(node, "proxy"); - if (child != NULL) - { - parse_proxy_info(child, ret); - } - - return ret; -} - -static void -load_accounts(void) -{ - xmlnode *node, *child; - - accounts_loaded = TRUE; - - node = gaim_util_read_xml_from_file("accounts.xml", _("accounts")); - - if (node == NULL) - return; - - for (child = xmlnode_get_child(node, "account"); child != NULL; - child = xmlnode_get_next_twin(child)) - { - GaimAccount *new_acct; - new_acct = parse_account(child); - gaim_accounts_add(new_acct); - } - - xmlnode_free(node); -} - - -static void -delete_setting(void *data) -{ - GaimAccountSetting *setting = (GaimAccountSetting *)data; - - g_free(setting->ui); - - if (setting->type == GAIM_PREF_STRING) - g_free(setting->value.string); - - g_free(setting); -} - -GaimAccount * -gaim_account_new(const char *username, const char *protocol_id) -{ - GaimAccount *account = NULL; - GaimPlugin *prpl = NULL; - GaimPluginProtocolInfo *prpl_info = NULL; - GaimStatusType *status_type; - - g_return_val_if_fail(username != NULL, NULL); - g_return_val_if_fail(protocol_id != NULL, NULL); - - account = gaim_accounts_find(username, protocol_id); - - if (account != NULL) - return account; - - account = g_new0(GaimAccount, 1); - GAIM_DBUS_REGISTER_POINTER(account, GaimAccount); - - gaim_account_set_username(account, username); - - gaim_account_set_protocol_id(account, protocol_id); - - account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, delete_setting); - account->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, (GDestroyNotify)g_hash_table_destroy); - account->system_log = NULL; - /* 0 is not a valid privacy setting */ - account->perm_deny = GAIM_PRIVACY_ALLOW_ALL; - - account->presence = gaim_presence_new_for_account(account); - - prpl = gaim_find_prpl(protocol_id); - - if (prpl == NULL) - return account; - - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); - if (prpl_info != NULL && prpl_info->status_types != NULL) - gaim_account_set_status_types(account, prpl_info->status_types(account)); - - status_type = gaim_account_get_status_type_with_primitive(account, GAIM_STATUS_AVAILABLE); - if (status_type != NULL) - gaim_presence_set_status_active(account->presence, - gaim_status_type_get_id(status_type), - TRUE); - else - gaim_presence_set_status_active(account->presence, - "offline", - TRUE); - - return account; -} - -void -gaim_account_destroy(GaimAccount *account) -{ - GList *l; - - g_return_if_fail(account != NULL); - - gaim_debug_info("account", "Destroying account %p\n", account); - - for (l = gaim_get_conversations(); l != NULL; l = l->next) - { - GaimConversation *conv = (GaimConversation *)l->data; - - if (gaim_conversation_get_account(conv) == account) - gaim_conversation_set_account(conv, NULL); - } - - g_free(account->username); - g_free(account->alias); - g_free(account->password); - g_free(account->user_info); - g_free(account->protocol_id); - - g_hash_table_destroy(account->settings); - g_hash_table_destroy(account->ui_settings); - - gaim_account_set_status_types(account, NULL); - - gaim_presence_destroy(account->presence); - - if(account->system_log) - gaim_log_free(account->system_log); - - GAIM_DBUS_UNREGISTER_POINTER(account); - g_free(account); -} - -void -gaim_account_register(GaimAccount *account) -{ - g_return_if_fail(account != NULL); - - gaim_debug_info("account", "Registering account %s\n", - gaim_account_get_username(account)); - - gaim_connection_new(account, TRUE, NULL); -} - -static void -request_password_ok_cb(GaimAccount *account, GaimRequestFields *fields) -{ - const char *entry; - gboolean remember; - - entry = gaim_request_fields_get_string(fields, "password"); - remember = gaim_request_fields_get_bool(fields, "remember"); - - if (!entry || !*entry) - { - gaim_notify_error(account, NULL, _("Password is required to sign on."), NULL); - return; - } - - if(remember) - gaim_account_set_remember_password(account, TRUE); - - gaim_account_set_password(account, entry); - - gaim_connection_new(account, FALSE, entry); -} - -static void -request_password(GaimAccount *account) -{ - gchar *primary; - const gchar *username; - GaimRequestFieldGroup *group; - GaimRequestField *field; - GaimRequestFields *fields; - - /* Close any previous password request windows */ - gaim_request_close_with_handle(account); - - username = gaim_account_get_username(account); - primary = g_strdup_printf(_("Enter password for %s (%s)"), username, - gaim_account_get_protocol_name(account)); - - fields = gaim_request_fields_new(); - group = gaim_request_field_group_new(NULL); - gaim_request_fields_add_group(fields, group); - - field = gaim_request_field_string_new("password", _("Enter Password"), NULL, FALSE); - gaim_request_field_string_set_masked(field, TRUE); - gaim_request_field_set_required(field, TRUE); - gaim_request_field_group_add_field(group, field); - - field = gaim_request_field_bool_new("remember", _("Save password"), FALSE); - gaim_request_field_group_add_field(group, field); - - gaim_request_fields(account, - NULL, - primary, - NULL, - fields, - _("OK"), G_CALLBACK(request_password_ok_cb), - _("Cancel"), NULL, - account); - g_free(primary); -} - -void -gaim_account_connect(GaimAccount *account) -{ - GaimPlugin *prpl; - GaimPluginProtocolInfo *prpl_info; - const char *password; - - g_return_if_fail(account != NULL); - - gaim_debug_info("account", "Connecting to account %s\n", - gaim_account_get_username(account)); - - if (!gaim_account_get_enabled(account, gaim_core_get_ui())) - return; - - prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); - if (prpl == NULL) - { - gchar *message; - - message = g_strdup_printf(_("Missing protocol plugin for %s"), - gaim_account_get_username(account)); - gaim_notify_error(account, _("Connection Error"), message, NULL); - g_free(message); - return; - } - - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); - password = gaim_account_get_password(account); - if ((password == NULL) && - !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && - !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) - request_password(account); - else - gaim_connection_new(account, FALSE, password); -} - -void -gaim_account_disconnect(GaimAccount *account) -{ - GaimConnection *gc; - - g_return_if_fail(account != NULL); - g_return_if_fail(!gaim_account_is_disconnected(account)); - - gaim_debug_info("account", "Disconnecting account %p\n", account); - - account->disconnecting = TRUE; - - gc = gaim_account_get_connection(account); - gaim_connection_destroy(gc); - if (!gaim_account_get_remember_password(account)) - gaim_account_set_password(account, NULL); - gaim_account_set_connection(account, NULL); - - account->disconnecting = FALSE; -} - -void -gaim_account_notify_added(GaimAccount *account, const char *remote_user, - const char *id, const char *alias, - const char *message) -{ - GaimAccountUiOps *ui_ops; - - g_return_if_fail(account != NULL); - g_return_if_fail(remote_user != NULL); - - ui_ops = gaim_accounts_get_ui_ops(); - - if (ui_ops != NULL && ui_ops->notify_added != NULL) - ui_ops->notify_added(account, remote_user, id, alias, message); -} - -void -gaim_account_request_add(GaimAccount *account, const char *remote_user, - const char *id, const char *alias, - const char *message) -{ - GaimAccountUiOps *ui_ops; - - g_return_if_fail(account != NULL); - g_return_if_fail(remote_user != NULL); - - ui_ops = gaim_accounts_get_ui_ops(); - - if (ui_ops != NULL && ui_ops->request_add != NULL) - ui_ops->request_add(account, remote_user, id, alias, message); -} - -static void -change_password_cb(GaimAccount *account, GaimRequestFields *fields) -{ - const char *orig_pass, *new_pass_1, *new_pass_2; - - orig_pass = gaim_request_fields_get_string(fields, "password"); - new_pass_1 = gaim_request_fields_get_string(fields, "new_password_1"); - new_pass_2 = gaim_request_fields_get_string(fields, "new_password_2"); - - if (g_utf8_collate(new_pass_1, new_pass_2)) - { - gaim_notify_error(account, NULL, - _("New passwords do not match."), NULL); - - return; - } - - if (orig_pass == NULL || new_pass_1 == NULL || new_pass_2 == NULL || - *orig_pass == '\0' || *new_pass_1 == '\0' || *new_pass_2 == '\0') - { - gaim_notify_error(account, NULL, - _("Fill out all fields completely."), NULL); - return; - } - - gaim_account_change_password(account, orig_pass, new_pass_1); -} - -void -gaim_account_request_change_password(GaimAccount *account) -{ - GaimRequestFields *fields; - GaimRequestFieldGroup *group; - GaimRequestField *field; - char primary[256]; - - g_return_if_fail(account != NULL); - g_return_if_fail(gaim_account_is_connected(account)); - - fields = gaim_request_fields_new(); - - group = gaim_request_field_group_new(NULL); - gaim_request_fields_add_group(fields, group); - - field = gaim_request_field_string_new("password", _("Original password"), - NULL, FALSE); - gaim_request_field_string_set_masked(field, TRUE); - gaim_request_field_set_required(field, TRUE); - gaim_request_field_group_add_field(group, field); - - field = gaim_request_field_string_new("new_password_1", - _("New password"), - NULL, FALSE); - gaim_request_field_string_set_masked(field, TRUE); - gaim_request_field_set_required(field, TRUE); - gaim_request_field_group_add_field(group, field); - - field = gaim_request_field_string_new("new_password_2", - _("New password (again)"), - NULL, FALSE); - gaim_request_field_string_set_masked(field, TRUE); - gaim_request_field_set_required(field, TRUE); - gaim_request_field_group_add_field(group, field); - - g_snprintf(primary, sizeof(primary), _("Change password for %s"), - gaim_account_get_username(account)); - - /* I'm sticking this somewhere in the code: bologna */ - - gaim_request_fields(gaim_account_get_connection(account), - NULL, - primary, - _("Please enter your current password and your " - "new password."), - fields, - _("OK"), G_CALLBACK(change_password_cb), - _("Cancel"), NULL, - account); -} - -static void -set_user_info_cb(GaimAccount *account, const char *user_info) -{ - GaimConnection *gc; - - gaim_account_set_user_info(account, user_info); - - gc = gaim_account_get_connection(account); - - if (gc != NULL) - serv_set_info(gc, user_info); -} - -void -gaim_account_request_change_user_info(GaimAccount *account) -{ - GaimConnection *gc; - char primary[256]; - - g_return_if_fail(account != NULL); - g_return_if_fail(gaim_account_is_connected(account)); - - gc = gaim_account_get_connection(account); - - g_snprintf(primary, sizeof(primary), - _("Change user information for %s"), - gaim_account_get_username(account)); - - gaim_request_input(gc, _("Set User Info"), primary, NULL, - gaim_account_get_user_info(account), - TRUE, FALSE, ((gc != NULL) && - (gc->flags & GAIM_CONNECTION_HTML) ? "html" : NULL), - _("Save"), G_CALLBACK(set_user_info_cb), - _("Cancel"), NULL, account); -} - -void -gaim_account_set_username(GaimAccount *account, const char *username) -{ - g_return_if_fail(account != NULL); - - g_free(account->username); - account->username = g_strdup(username); - - schedule_accounts_save(); -} - -void -gaim_account_set_password(GaimAccount *account, const char *password) -{ - g_return_if_fail(account != NULL); - - g_free(account->password); - account->password = g_strdup(password); - - schedule_accounts_save(); -} - -void -gaim_account_set_alias(GaimAccount *account, const char *alias) -{ - g_return_if_fail(account != NULL); - - /* - * Do nothing if alias and account->alias are both NULL. Or if - * they're the exact same string. - */ - if (alias == account->alias) - return; - - if ((!alias && account->alias) || (alias && !account->alias) || - g_utf8_collate(account->alias, alias)) - { - char *old = account->alias; - - account->alias = g_strdup(alias); - gaim_signal_emit(gaim_accounts_get_handle(), "account-alias-changed", - account, old); - g_free(old); - - schedule_accounts_save(); - } -} - -void -gaim_account_set_user_info(GaimAccount *account, const char *user_info) -{ - g_return_if_fail(account != NULL); - - g_free(account->user_info); - account->user_info = g_strdup(user_info); - - schedule_accounts_save(); -} - -void -gaim_account_set_buddy_icon(GaimAccount *account, const char *icon) -{ - g_return_if_fail(account != NULL); - - /* Delete an existing icon from the cache. */ - if (account->buddy_icon != NULL && (icon == NULL || strcmp(account->buddy_icon, icon))) - { - const char *dirname = gaim_buddy_icons_get_cache_dir(); - struct stat st; - - if (g_stat(account->buddy_icon, &st) == 0) - { - /* The file exists. This is a full path. */ - - /* XXX: This is a hack so we only delete the file if it's - * in the cache dir. Otherwise, people who upgrade (who - * may have buddy icon filenames set outside of the cache - * dir) could lose files. */ - if (!strncmp(dirname, account->buddy_icon, strlen(dirname))) - g_unlink(account->buddy_icon); - } - else - { - char *filename = g_build_filename(dirname, account->buddy_icon, NULL); - g_unlink(filename); - g_free(filename); - } - } - - g_free(account->buddy_icon); - account->buddy_icon = g_strdup(icon); - if (gaim_account_is_connected(account)) - { - char *filename = gaim_buddy_icons_get_full_path(icon); - serv_set_buddyicon(gaim_account_get_connection(account), filename); - g_free(filename); - } - - schedule_accounts_save(); -} - -void -gaim_account_set_protocol_id(GaimAccount *account, const char *protocol_id) -{ - g_return_if_fail(account != NULL); - g_return_if_fail(protocol_id != NULL); - - g_free(account->protocol_id); - account->protocol_id = g_strdup(protocol_id); - - schedule_accounts_save(); -} - -void -gaim_account_set_connection(GaimAccount *account, GaimConnection *gc) -{ - g_return_if_fail(account != NULL); - - account->gc = gc; -} - -void -gaim_account_set_remember_password(GaimAccount *account, gboolean value) -{ - g_return_if_fail(account != NULL); - - account->remember_pass = value; - - schedule_accounts_save(); -} - -void -gaim_account_set_check_mail(GaimAccount *account, gboolean value) -{ - g_return_if_fail(account != NULL); - - gaim_account_set_bool(account, "check-mail", value); -} - -void -gaim_account_set_enabled(GaimAccount *account, const char *ui, - gboolean value) -{ - GaimConnection *gc; - gboolean was_enabled = FALSE; - - g_return_if_fail(account != NULL); - g_return_if_fail(ui != NULL); - - was_enabled = gaim_account_get_enabled(account, ui); - - gaim_account_set_ui_bool(account, ui, "auto-login", value); - gc = gaim_account_get_connection(account); - - if(was_enabled && !value) - gaim_signal_emit(gaim_accounts_get_handle(), "account-disabled", account); - else if(!was_enabled && value) - gaim_signal_emit(gaim_accounts_get_handle(), "account-enabled", account); - - if ((gc != NULL) && (gc->wants_to_die == TRUE)) - return; - - if (value && gaim_presence_is_online(account->presence)) - gaim_account_connect(account); - else if (!value && !gaim_account_is_disconnected(account)) - gaim_account_disconnect(account); -} - -void -gaim_account_set_proxy_info(GaimAccount *account, GaimProxyInfo *info) -{ - g_return_if_fail(account != NULL); - - if (account->proxy_info != NULL) - gaim_proxy_info_destroy(account->proxy_info); - - account->proxy_info = info; - - schedule_accounts_save(); -} - -void -gaim_account_set_status_types(GaimAccount *account, GList *status_types) -{ - g_return_if_fail(account != NULL); - - /* Old with the old... */ - if (account->status_types != NULL) - { - g_list_foreach(account->status_types, (GFunc)gaim_status_type_destroy, NULL); - g_list_free(account->status_types); - } - - /* In with the new... */ - account->status_types = status_types; -} - -void -gaim_account_set_status(GaimAccount *account, const char *status_id, - gboolean active, ...) -{ - va_list args; - - va_start(args, active); - gaim_account_set_status_vargs(account, status_id, active, args); - va_end(args); -} - -void -gaim_account_set_status_vargs(GaimAccount *account, const char *status_id, - gboolean active, va_list args) -{ - GList *attrs = NULL; - const gchar *id; - gpointer data; - - if (args != NULL) - { - while ((id = va_arg(args, const char *)) != NULL) - { - attrs = g_list_append(attrs, (char *)id); - data = va_arg(args, void *); - attrs = g_list_append(attrs, data); - } - } - gaim_account_set_status_list(account, status_id, active, attrs); - g_list_free(attrs); -} - -void -gaim_account_set_status_list(GaimAccount *account, const char *status_id, - gboolean active, GList *attrs) -{ - GaimStatus *status; - - g_return_if_fail(account != NULL); - g_return_if_fail(status_id != NULL); - - status = gaim_account_get_status(account, status_id); - if (status == NULL) - { - gaim_debug_error("account", - "Invalid status ID %s for account %s (%s)\n", - status_id, gaim_account_get_username(account), - gaim_account_get_protocol_id(account)); - return; - } - - if (active || gaim_status_is_independent(status)) - gaim_status_set_active_with_attrs_list(status, active, attrs); - - /* - * Our current statuses are saved to accounts.xml (so that when we - * reconnect, we go back to the previous status). - */ - schedule_accounts_save(); -} - -void -gaim_account_clear_settings(GaimAccount *account) -{ - g_return_if_fail(account != NULL); - - g_hash_table_destroy(account->settings); - - account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, delete_setting); -} - -void -gaim_account_set_int(GaimAccount *account, const char *name, int value) -{ - GaimAccountSetting *setting; - - g_return_if_fail(account != NULL); - g_return_if_fail(name != NULL); - - setting = g_new0(GaimAccountSetting, 1); - - setting->type = GAIM_PREF_INT; - setting->value.integer = value; - - g_hash_table_insert(account->settings, g_strdup(name), setting); - - schedule_accounts_save(); -} - -void -gaim_account_set_string(GaimAccount *account, const char *name, - const char *value) -{ - GaimAccountSetting *setting; - - g_return_if_fail(account != NULL); - g_return_if_fail(name != NULL); - - setting = g_new0(GaimAccountSetting, 1); - - setting->type = GAIM_PREF_STRING; - setting->value.string = g_strdup(value); - - g_hash_table_insert(account->settings, g_strdup(name), setting); - - schedule_accounts_save(); -} - -void -gaim_account_set_bool(GaimAccount *account, const char *name, gboolean value) -{ - GaimAccountSetting *setting; - - g_return_if_fail(account != NULL); - g_return_if_fail(name != NULL); - - setting = g_new0(GaimAccountSetting, 1); - - setting->type = GAIM_PREF_BOOLEAN; - setting->value.bool = value; - - g_hash_table_insert(account->settings, g_strdup(name), setting); - - schedule_accounts_save(); -} - -static GHashTable * -get_ui_settings_table(GaimAccount *account, const char *ui) -{ - GHashTable *table; - - table = g_hash_table_lookup(account->ui_settings, ui); - - if (table == NULL) { - table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, - delete_setting); - g_hash_table_insert(account->ui_settings, g_strdup(ui), table); - } - - return table; -} - -void -gaim_account_set_ui_int(GaimAccount *account, const char *ui, - const char *name, int value) -{ - GaimAccountSetting *setting; - GHashTable *table; - - g_return_if_fail(account != NULL); - g_return_if_fail(ui != NULL); - g_return_if_fail(name != NULL); - - setting = g_new0(GaimAccountSetting, 1); - - setting->type = GAIM_PREF_INT; - setting->ui = g_strdup(ui); - setting->value.integer = value; - - table = get_ui_settings_table(account, ui); - - g_hash_table_insert(table, g_strdup(name), setting); - - schedule_accounts_save(); -} - -void -gaim_account_set_ui_string(GaimAccount *account, const char *ui, - const char *name, const char *value) -{ - GaimAccountSetting *setting; - GHashTable *table; - - g_return_if_fail(account != NULL); - g_return_if_fail(ui != NULL); - g_return_if_fail(name != NULL); - - setting = g_new0(GaimAccountSetting, 1); - - setting->type = GAIM_PREF_STRING; - setting->ui = g_strdup(ui); - setting->value.string = g_strdup(value); - - table = get_ui_settings_table(account, ui); - - g_hash_table_insert(table, g_strdup(name), setting); - - schedule_accounts_save(); -} - -void -gaim_account_set_ui_bool(GaimAccount *account, const char *ui, - const char *name, gboolean value) -{ - GaimAccountSetting *setting; - GHashTable *table; - - g_return_if_fail(account != NULL); - g_return_if_fail(ui != NULL); - g_return_if_fail(name != NULL); - - setting = g_new0(GaimAccountSetting, 1); - - setting->type = GAIM_PREF_BOOLEAN; - setting->ui = g_strdup(ui); - setting->value.bool = value; - - table = get_ui_settings_table(account, ui); - - g_hash_table_insert(table, g_strdup(name), setting); - - schedule_accounts_save(); -} - -static GaimConnectionState -gaim_account_get_state(const GaimAccount *account) -{ - GaimConnection *gc; - - g_return_val_if_fail(account != NULL, GAIM_DISCONNECTED); - - gc = gaim_account_get_connection(account); - if (!gc) - return GAIM_DISCONNECTED; - - return gaim_connection_get_state(gc); -} - -gboolean -gaim_account_is_connected(const GaimAccount *account) -{ - return (gaim_account_get_state(account) == GAIM_CONNECTED); -} - -gboolean -gaim_account_is_connecting(const GaimAccount *account) -{ - return (gaim_account_get_state(account) == GAIM_CONNECTING); -} - -gboolean -gaim_account_is_disconnected(const GaimAccount *account) -{ - return (gaim_account_get_state(account) == GAIM_DISCONNECTED); -} - -const char * -gaim_account_get_username(const GaimAccount *account) -{ - g_return_val_if_fail(account != NULL, NULL); - - return account->username; -} - -const char * -gaim_account_get_password(const GaimAccount *account) -{ - g_return_val_if_fail(account != NULL, NULL); - - return account->password; -} - -const char * -gaim_account_get_alias(const GaimAccount *account) -{ - g_return_val_if_fail(account != NULL, NULL); - - return account->alias; -} - -const char * -gaim_account_get_user_info(const GaimAccount *account) -{ - g_return_val_if_fail(account != NULL, NULL); - - return account->user_info; -} - -const char * -gaim_account_get_buddy_icon(const GaimAccount *account) -{ - g_return_val_if_fail(account != NULL, NULL); - - return account->buddy_icon; -} - -const char * -gaim_account_get_protocol_id(const GaimAccount *account) -{ - g_return_val_if_fail(accoun... [truncated message content] |