From: <ev...@us...> - 2006-08-19 01:34:59
|
Revision: 16860 Author: evands Date: 2006-08-18 18:34:52 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16860&view=rev Log Message: ----------- Restored [16854] by aaronsheldon: Generates the image for the about dialog on demand instead of making it a stock image which remains in memory forever. Also, restored svn:ignore properties Modified Paths: -------------- trunk/gtk/gtkdialogs.c trunk/gtk/gtkstock.h Added Paths: ----------- trunk/gtk/gtkstock.c Property Changed: ---------------- trunk/gtk/ trunk/gtk/plugins/ trunk/gtk/plugins/docklet/ Property changes on: trunk/gtk ___________________________________________________________________ Name: svn:ignore + Makefile.in .deps Makefile Modified: trunk/gtk/gtkdialogs.c =================================================================== --- trunk/gtk/gtkdialogs.c 2006-08-19 01:31:21 UTC (rev 16859) +++ trunk/gtk/gtkdialogs.c 2006-08-19 01:34:52 UTC (rev 16860) @@ -37,7 +37,7 @@ #include "gtkimhtmltoolbar.h" #include "gtklog.h" #include "gtkutils.h" -#include "gaimstock.h" +#include "gtkstock.h" static GList *dialogwindows = NULL; @@ -223,6 +223,44 @@ about = NULL; } +/* This function puts the version number onto the pixmap we use in the 'about' + * screen in Gaim. */ +static void +gaim_gtk_logo_versionize(GdkPixbuf **original, GtkWidget *widget) { + GdkPixmap *pixmap; + GtkStyle *style; + PangoContext *context; + PangoLayout *layout; + gchar *markup; + gint width, height; + gint lwidth = 0, lheight = 0; + + style = gtk_widget_get_style(widget); + + gdk_pixbuf_render_pixmap_and_mask(*original, &pixmap, NULL, 255); + width = gdk_pixbuf_get_width(*original); + height = gdk_pixbuf_get_height(*original); + g_object_unref(G_OBJECT(*original)); + + context = gtk_widget_get_pango_context(widget); + layout = pango_layout_new(context); + + markup = g_strdup_printf("<span foreground=\"#FFFFFF\" size=\"larger\">%s</span>", VERSION); + pango_layout_set_font_description(layout, style->font_desc); + pango_layout_set_markup(layout, markup, strlen(markup)); + g_free(markup); + + pango_layout_get_pixel_size(layout, &lwidth, &lheight); + gdk_draw_layout(GDK_DRAWABLE(pixmap), style->bg_gc[GTK_STATE_NORMAL], + width - (lwidth + 3), height - (lheight + 1), layout); + g_object_unref(G_OBJECT(layout)); + + *original = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, + 0, 0, 0, 0, + width, height); + g_object_unref(G_OBJECT(pixmap)); +} + void gaim_gtkdialogs_about() { GtkWidget *hbox; @@ -236,6 +274,8 @@ GString *str; int i; AtkObject *obj; + char* filename; + GdkPixbuf *pixbuf; if (about != NULL) { gtk_window_present(GTK_WINDOW(about)); @@ -256,7 +296,17 @@ vbox = gtk_vbox_new(FALSE, GAIM_HIG_BORDER); gtk_container_add(GTK_CONTAINER(hbox), vbox); - logo = gtk_image_new_from_stock(GAIM_STOCK_LOGO, gtk_icon_size_from_name(GAIM_ICON_SIZE_LOGO)); + /* Generate a logo with a version number */ + logo = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_realize(logo); + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "logo.png", NULL); + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + g_free(filename); + gaim_gtk_logo_versionize(&pixbuf, logo); + gtk_widget_destroy(logo); + logo = gtk_image_new_from_pixbuf(pixbuf); + gdk_pixbuf_unref(pixbuf); + /* Insert the logo */ obj = gtk_widget_get_accessible(logo); atk_object_set_description(obj, "Gaim " VERSION); gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0); Added: trunk/gtk/gtkstock.c =================================================================== --- trunk/gtk/gtkstock.c (rev 0) +++ trunk/gtk/gtkstock.c 2006-08-19 01:34:52 UTC (rev 16860) @@ -0,0 +1,245 @@ +/** + * @file gtkstock.c GTK+ Stock resources + * @ingroup gtkui + * + * 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 "gtkgaim.h" + +#include "gtkstock.h" + +static struct StockIcon +{ + const char *name; + const char *dir; + const char *filename; + +} const stock_icons[] = +{ + { GAIM_STOCK_ABOUT, "buttons", "about_menu.png" }, + { GAIM_STOCK_ACCOUNTS, "buttons", "accounts.png" }, + { GAIM_STOCK_ACTION, NULL, GTK_STOCK_EXECUTE }, +#if GTK_CHECK_VERSION(2,6,0) + { GAIM_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, +#else + { GAIM_STOCK_ALIAS, "buttons", "edit.png" }, +#endif + { GAIM_STOCK_BGCOLOR, "buttons", "change-bgcolor-small.png" }, + { GAIM_STOCK_BLOCK, NULL, GTK_STOCK_STOP }, + { GAIM_STOCK_CHAT, NULL, GTK_STOCK_JUMP_TO }, + { GAIM_STOCK_CLEAR, NULL, GTK_STOCK_CLEAR }, + { GAIM_STOCK_CLOSE_TABS, NULL, GTK_STOCK_CLOSE }, +#if GTK_CHECK_VERSION(2,6,0) + { GAIM_STOCK_CONNECT, NULL, GTK_STOCK_CONNECT }, +#else + { GAIM_STOCK_CONNECT, "icons", "stock_connect_16.png" }, +#endif + { GAIM_STOCK_DEBUG, NULL, GTK_STOCK_PROPERTIES }, + { GAIM_STOCK_DOWNLOAD, NULL, GTK_STOCK_GO_DOWN }, + { GAIM_STOCK_DIALOG_AUTH, "dialogs", "gaim_auth.png" }, + { GAIM_STOCK_DIALOG_COOL, "dialogs", "gaim_cool.png" }, + { GAIM_STOCK_DIALOG_ERROR, "dialogs", "gaim_error.png" }, + { GAIM_STOCK_DIALOG_INFO, "dialogs", "gaim_info.png" }, + { GAIM_STOCK_DIALOG_QUESTION, "dialogs", "gaim_question.png" }, + { GAIM_STOCK_DIALOG_WARNING, "dialogs", "gaim_warning.png" }, +#if GTK_CHECK_VERSION(2,6,0) + { GAIM_STOCK_DISCONNECT, NULL, GTK_STOCK_DISCONNECT }, +#else + { GAIM_STOCK_DISCONNECT, "icons", "stock_disconnect_16.png" }, +#endif + { GAIM_STOCK_FGCOLOR, "buttons", "change-fgcolor-small.png" }, +#if GTK_CHECK_VERSION(2,6,0) + { GAIM_STOCK_EDIT, NULL, GTK_STOCK_EDIT }, +#else + { GAIM_STOCK_EDIT, "buttons", "edit.png" }, +#endif + { GAIM_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, + { GAIM_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, + { GAIM_STOCK_FILE_TRANSFER, NULL, GTK_STOCK_REVERT_TO_SAVED }, + { GAIM_STOCK_ICON_AWAY, "icons", "away.png" }, + { GAIM_STOCK_ICON_AWAY_MSG, "icons", "msgpend.png" }, + { GAIM_STOCK_ICON_CONNECT, "icons", "connect.png" }, + { GAIM_STOCK_ICON_OFFLINE, "icons", "offline.png" }, + { GAIM_STOCK_ICON_ONLINE, "icons", "online.png" }, + { GAIM_STOCK_ICON_ONLINE_MSG, "icons", "msgunread.png" }, + { GAIM_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, + { GAIM_STOCK_IM, "buttons", "send-im.png" }, + { GAIM_STOCK_IMAGE, "buttons", "insert-image-small.png" }, +#if GTK_CHECK_VERSION(2,8,0) + { GAIM_STOCK_INFO, NULL, GTK_STOCK_INFO }, +#else + { GAIM_STOCK_INFO, "buttons", "info.png" }, +#endif + { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, + { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, + { GAIM_STOCK_LOG, NULL, GTK_STOCK_DND_MULTIPLE }, + { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, +#if GTK_CHECK_VERSION(2,6,0) + { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, +#else + { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, +#endif + { GAIM_STOCK_PENDING, "buttons", "send-im.png" }, +#if GTK_CHECK_VERSION(2,6,0) + { GAIM_STOCK_PLUGIN, NULL, GTK_STOCK_DISCONNECT }, +#else + { GAIM_STOCK_PLUGIN, "icons", "stock_disconnect_16.png" }, +#endif + { GAIM_STOCK_POUNCE, NULL, GTK_STOCK_REDO }, + { GAIM_STOCK_OPEN_MAIL, NULL, GTK_STOCK_JUMP_TO }, + { GAIM_STOCK_SEND, "buttons", "send-im.png" }, + { GAIM_STOCK_SIGN_ON, NULL, GTK_STOCK_EXECUTE }, + { GAIM_STOCK_SIGN_OFF, NULL, GTK_STOCK_CLOSE }, + { GAIM_STOCK_SMILEY, "buttons", "insert-smiley-small.png" }, + { GAIM_STOCK_TEXT_BIGGER, "buttons", "text_bigger.png" }, + { GAIM_STOCK_TEXT_NORMAL, "buttons", "text_normal.png" }, + { GAIM_STOCK_TEXT_SMALLER, "buttons", "text_smaller.png" }, + { GAIM_STOCK_TYPED, "gaim", "typed.png" }, + { GAIM_STOCK_TYPING, "gaim", "typing.png" }, + { GAIM_STOCK_VOICE_CHAT, "gaim", "phone.png" }, + { GAIM_STOCK_STATUS_ONLINE, "gaim", "status-online.png" }, + { GAIM_STOCK_STATUS_OFFLINE, "gaim", "status-offline.png" }, + { GAIM_STOCK_STATUS_AWAY, "gaim", "status-away.png" }, + { GAIM_STOCK_STATUS_INVISIBLE,"gaim", "status-invisible.png" }, + { GAIM_STOCK_STATUS_TYPING0, "gaim", "status-typing0.png" }, + { GAIM_STOCK_STATUS_TYPING1, "gaim", "status-typing1.png" }, + { GAIM_STOCK_STATUS_TYPING2, "gaim", "status-typing2.png" }, + { GAIM_STOCK_STATUS_TYPING3, "gaim", "status-typing3.png" }, + { GAIM_STOCK_STATUS_CONNECT0, "gaim", "status-connect0.png" }, + { GAIM_STOCK_STATUS_CONNECT1, "gaim", "status-connect1.png" }, + { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, + { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, + { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP } +}; + +static const GtkStockItem stock_items[] = +{ + { GAIM_STOCK_ALIAS, N_("_Alias"), 0, 0, NULL }, + { GAIM_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, + { GAIM_STOCK_CLOSE_TABS, N_("Close _tabs"), 0, 0, NULL }, + { GAIM_STOCK_IM, N_("I_M"), 0, 0, NULL }, + { GAIM_STOCK_INFO, N_("_Get Info"), 0, 0, NULL }, + { GAIM_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, + { GAIM_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, + { GAIM_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, + { GAIM_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, +}; + +static gchar * +find_file(const char *dir, const char *base) +{ + char *filename; + + if (base == NULL) + return NULL; + + if (!strcmp(dir, "gaim")) + filename = g_build_filename(DATADIR, "pixmaps", "gaim", base, NULL); + else + { + filename = g_build_filename(DATADIR, "pixmaps", "gaim", dir, + base, NULL); + } + + if (!g_file_test(filename, G_FILE_TEST_EXISTS)) + { + g_critical("Unable to load stock pixmap %s\n", base); + + g_free(filename); + + return NULL; + } + + return filename; +} + +void +gaim_gtk_stock_init(void) +{ + static gboolean stock_initted = FALSE; + GtkIconFactory *icon_factory; + size_t i; + GtkWidget *win; + + if (stock_initted) + return; + + stock_initted = TRUE; + + /* Setup the icon factory. */ + icon_factory = gtk_icon_factory_new(); + + gtk_icon_factory_add_default(icon_factory); + + /* Er, yeah, a hack, but it works. :) */ + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_realize(win); + + for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) + { + GdkPixbuf *pixbuf; + GtkIconSet *iconset; + gchar *filename; + + if (stock_icons[i].dir == NULL) + { + /* GTK+ Stock icon */ + iconset = gtk_style_lookup_icon_set(gtk_widget_get_style(win), + stock_icons[i].filename); + } + else + { + filename = find_file(stock_icons[i].dir, stock_icons[i].filename); + + if (filename == NULL) + continue; + + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + + g_free(filename); + + iconset = gtk_icon_set_new_from_pixbuf(pixbuf); + + g_object_unref(G_OBJECT(pixbuf)); + } + + gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); + + gtk_icon_set_unref(iconset); + } + + gtk_widget_destroy(win); + + /* register custom icon sizes */ + gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); + gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_TWO_LINE, 30, 30); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL, 16, 16); + gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE, 24, 24); + + g_object_unref(G_OBJECT(icon_factory)); + + /* Register the stock items. */ + gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); +} Property changes on: trunk/gtk/gtkstock.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/gtk/gtkstock.h =================================================================== --- trunk/gtk/gtkstock.h 2006-08-19 01:31:21 UTC (rev 16859) +++ trunk/gtk/gtkstock.h 2006-08-19 01:34:52 UTC (rev 16860) @@ -67,7 +67,6 @@ #define GAIM_STOCK_INVITE "gaim-invite" #define GAIM_STOCK_LINK "gaim-link" #define GAIM_STOCK_LOG "gaim-log" -#define GAIM_STOCK_LOGO "gaim-logo" #define GAIM_STOCK_MODIFY "gaim-modify" #define GAIM_STOCK_OPEN_MAIL "gaim-stock-open-mail" #define GAIM_STOCK_PAUSE "gaim-pause" Property changes on: trunk/gtk/plugins ___________________________________________________________________ Name: svn:ignore + Makefile.in .deps Makefile Property changes on: trunk/gtk/plugins/docklet ___________________________________________________________________ Name: svn:ignore - .deps .libs Makefile Makefile.in *.dll *.la *.lo + .deps .libs Makefile Makefile.in *.dll *.la *.lo *.loT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-19 02:40:02
|
Revision: 16868 Author: sadrul Date: 2006-08-18 19:39:56 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16868&view=rev Log Message: ----------- This should compile now. Modified Paths: -------------- trunk/gtk/gaimstock.h trunk/gtk/gtkaccount.c trunk/gtk/gtkdialogs.c Removed Paths: ------------- trunk/gtk/gtkstock.c trunk/gtk/gtkstock.h Modified: trunk/gtk/gaimstock.h =================================================================== --- trunk/gtk/gaimstock.h 2006-08-19 02:32:55 UTC (rev 16867) +++ trunk/gtk/gaimstock.h 2006-08-19 02:39:56 UTC (rev 16868) @@ -22,6 +22,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <gtk/gtkstock.h> + #ifndef _GAIM_STOCK_H_ #define _GAIM_STOCK_H_ Modified: trunk/gtk/gtkaccount.c =================================================================== --- trunk/gtk/gtkaccount.c 2006-08-19 02:32:55 UTC (rev 16867) +++ trunk/gtk/gtkaccount.c 2006-08-19 02:39:56 UTC (rev 16868) @@ -44,7 +44,7 @@ #include "gtkdialogs.h" #include "gtkutils.h" #include "gtkstatusbox.h" -#include "gtkstock.h" +#include "gaimstock.h" enum { Modified: trunk/gtk/gtkdialogs.c =================================================================== --- trunk/gtk/gtkdialogs.c 2006-08-19 02:32:55 UTC (rev 16867) +++ trunk/gtk/gtkdialogs.c 2006-08-19 02:39:56 UTC (rev 16868) @@ -37,7 +37,7 @@ #include "gtkimhtmltoolbar.h" #include "gtklog.h" #include "gtkutils.h" -#include "gtkstock.h" +#include "gaimstock.h" static GList *dialogwindows = NULL; Deleted: trunk/gtk/gtkstock.c =================================================================== --- trunk/gtk/gtkstock.c 2006-08-19 02:32:55 UTC (rev 16867) +++ trunk/gtk/gtkstock.c 2006-08-19 02:39:56 UTC (rev 16868) @@ -1,245 +0,0 @@ -/** - * @file gtkstock.c GTK+ Stock resources - * @ingroup gtkui - * - * 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 "gtkgaim.h" - -#include "gtkstock.h" - -static struct StockIcon -{ - const char *name; - const char *dir; - const char *filename; - -} const stock_icons[] = -{ - { GAIM_STOCK_ABOUT, "buttons", "about_menu.png" }, - { GAIM_STOCK_ACCOUNTS, "buttons", "accounts.png" }, - { GAIM_STOCK_ACTION, NULL, GTK_STOCK_EXECUTE }, -#if GTK_CHECK_VERSION(2,6,0) - { GAIM_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, -#else - { GAIM_STOCK_ALIAS, "buttons", "edit.png" }, -#endif - { GAIM_STOCK_BGCOLOR, "buttons", "change-bgcolor-small.png" }, - { GAIM_STOCK_BLOCK, NULL, GTK_STOCK_STOP }, - { GAIM_STOCK_CHAT, NULL, GTK_STOCK_JUMP_TO }, - { GAIM_STOCK_CLEAR, NULL, GTK_STOCK_CLEAR }, - { GAIM_STOCK_CLOSE_TABS, NULL, GTK_STOCK_CLOSE }, -#if GTK_CHECK_VERSION(2,6,0) - { GAIM_STOCK_CONNECT, NULL, GTK_STOCK_CONNECT }, -#else - { GAIM_STOCK_CONNECT, "icons", "stock_connect_16.png" }, -#endif - { GAIM_STOCK_DEBUG, NULL, GTK_STOCK_PROPERTIES }, - { GAIM_STOCK_DOWNLOAD, NULL, GTK_STOCK_GO_DOWN }, - { GAIM_STOCK_DIALOG_AUTH, "dialogs", "gaim_auth.png" }, - { GAIM_STOCK_DIALOG_COOL, "dialogs", "gaim_cool.png" }, - { GAIM_STOCK_DIALOG_ERROR, "dialogs", "gaim_error.png" }, - { GAIM_STOCK_DIALOG_INFO, "dialogs", "gaim_info.png" }, - { GAIM_STOCK_DIALOG_QUESTION, "dialogs", "gaim_question.png" }, - { GAIM_STOCK_DIALOG_WARNING, "dialogs", "gaim_warning.png" }, -#if GTK_CHECK_VERSION(2,6,0) - { GAIM_STOCK_DISCONNECT, NULL, GTK_STOCK_DISCONNECT }, -#else - { GAIM_STOCK_DISCONNECT, "icons", "stock_disconnect_16.png" }, -#endif - { GAIM_STOCK_FGCOLOR, "buttons", "change-fgcolor-small.png" }, -#if GTK_CHECK_VERSION(2,6,0) - { GAIM_STOCK_EDIT, NULL, GTK_STOCK_EDIT }, -#else - { GAIM_STOCK_EDIT, "buttons", "edit.png" }, -#endif - { GAIM_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, - { GAIM_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, - { GAIM_STOCK_FILE_TRANSFER, NULL, GTK_STOCK_REVERT_TO_SAVED }, - { GAIM_STOCK_ICON_AWAY, "icons", "away.png" }, - { GAIM_STOCK_ICON_AWAY_MSG, "icons", "msgpend.png" }, - { GAIM_STOCK_ICON_CONNECT, "icons", "connect.png" }, - { GAIM_STOCK_ICON_OFFLINE, "icons", "offline.png" }, - { GAIM_STOCK_ICON_ONLINE, "icons", "online.png" }, - { GAIM_STOCK_ICON_ONLINE_MSG, "icons", "msgunread.png" }, - { GAIM_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, - { GAIM_STOCK_IM, "buttons", "send-im.png" }, - { GAIM_STOCK_IMAGE, "buttons", "insert-image-small.png" }, -#if GTK_CHECK_VERSION(2,8,0) - { GAIM_STOCK_INFO, NULL, GTK_STOCK_INFO }, -#else - { GAIM_STOCK_INFO, "buttons", "info.png" }, -#endif - { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, - { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, - { GAIM_STOCK_LOG, NULL, GTK_STOCK_DND_MULTIPLE }, - { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, -#if GTK_CHECK_VERSION(2,6,0) - { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, -#else - { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, -#endif - { GAIM_STOCK_PENDING, "buttons", "send-im.png" }, -#if GTK_CHECK_VERSION(2,6,0) - { GAIM_STOCK_PLUGIN, NULL, GTK_STOCK_DISCONNECT }, -#else - { GAIM_STOCK_PLUGIN, "icons", "stock_disconnect_16.png" }, -#endif - { GAIM_STOCK_POUNCE, NULL, GTK_STOCK_REDO }, - { GAIM_STOCK_OPEN_MAIL, NULL, GTK_STOCK_JUMP_TO }, - { GAIM_STOCK_SEND, "buttons", "send-im.png" }, - { GAIM_STOCK_SIGN_ON, NULL, GTK_STOCK_EXECUTE }, - { GAIM_STOCK_SIGN_OFF, NULL, GTK_STOCK_CLOSE }, - { GAIM_STOCK_SMILEY, "buttons", "insert-smiley-small.png" }, - { GAIM_STOCK_TEXT_BIGGER, "buttons", "text_bigger.png" }, - { GAIM_STOCK_TEXT_NORMAL, "buttons", "text_normal.png" }, - { GAIM_STOCK_TEXT_SMALLER, "buttons", "text_smaller.png" }, - { GAIM_STOCK_TYPED, "gaim", "typed.png" }, - { GAIM_STOCK_TYPING, "gaim", "typing.png" }, - { GAIM_STOCK_VOICE_CHAT, "gaim", "phone.png" }, - { GAIM_STOCK_STATUS_ONLINE, "gaim", "status-online.png" }, - { GAIM_STOCK_STATUS_OFFLINE, "gaim", "status-offline.png" }, - { GAIM_STOCK_STATUS_AWAY, "gaim", "status-away.png" }, - { GAIM_STOCK_STATUS_INVISIBLE,"gaim", "status-invisible.png" }, - { GAIM_STOCK_STATUS_TYPING0, "gaim", "status-typing0.png" }, - { GAIM_STOCK_STATUS_TYPING1, "gaim", "status-typing1.png" }, - { GAIM_STOCK_STATUS_TYPING2, "gaim", "status-typing2.png" }, - { GAIM_STOCK_STATUS_TYPING3, "gaim", "status-typing3.png" }, - { GAIM_STOCK_STATUS_CONNECT0, "gaim", "status-connect0.png" }, - { GAIM_STOCK_STATUS_CONNECT1, "gaim", "status-connect1.png" }, - { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, - { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, - { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP } -}; - -static const GtkStockItem stock_items[] = -{ - { GAIM_STOCK_ALIAS, N_("_Alias"), 0, 0, NULL }, - { GAIM_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, - { GAIM_STOCK_CLOSE_TABS, N_("Close _tabs"), 0, 0, NULL }, - { GAIM_STOCK_IM, N_("I_M"), 0, 0, NULL }, - { GAIM_STOCK_INFO, N_("_Get Info"), 0, 0, NULL }, - { GAIM_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, - { GAIM_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, - { GAIM_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, - { GAIM_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, -}; - -static gchar * -find_file(const char *dir, const char *base) -{ - char *filename; - - if (base == NULL) - return NULL; - - if (!strcmp(dir, "gaim")) - filename = g_build_filename(DATADIR, "pixmaps", "gaim", base, NULL); - else - { - filename = g_build_filename(DATADIR, "pixmaps", "gaim", dir, - base, NULL); - } - - if (!g_file_test(filename, G_FILE_TEST_EXISTS)) - { - g_critical("Unable to load stock pixmap %s\n", base); - - g_free(filename); - - return NULL; - } - - return filename; -} - -void -gaim_gtk_stock_init(void) -{ - static gboolean stock_initted = FALSE; - GtkIconFactory *icon_factory; - size_t i; - GtkWidget *win; - - if (stock_initted) - return; - - stock_initted = TRUE; - - /* Setup the icon factory. */ - icon_factory = gtk_icon_factory_new(); - - gtk_icon_factory_add_default(icon_factory); - - /* Er, yeah, a hack, but it works. :) */ - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_widget_realize(win); - - for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) - { - GdkPixbuf *pixbuf; - GtkIconSet *iconset; - gchar *filename; - - if (stock_icons[i].dir == NULL) - { - /* GTK+ Stock icon */ - iconset = gtk_style_lookup_icon_set(gtk_widget_get_style(win), - stock_icons[i].filename); - } - else - { - filename = find_file(stock_icons[i].dir, stock_icons[i].filename); - - if (filename == NULL) - continue; - - pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - - g_free(filename); - - iconset = gtk_icon_set_new_from_pixbuf(pixbuf); - - g_object_unref(G_OBJECT(pixbuf)); - } - - gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); - - gtk_icon_set_unref(iconset); - } - - gtk_widget_destroy(win); - - /* register custom icon sizes */ - gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); - gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_TWO_LINE, 30, 30); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL, 16, 16); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE, 24, 24); - - g_object_unref(G_OBJECT(icon_factory)); - - /* Register the stock items. */ - gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); -} Deleted: trunk/gtk/gtkstock.h =================================================================== --- trunk/gtk/gtkstock.h 2006-08-19 02:32:55 UTC (rev 16867) +++ trunk/gtk/gtkstock.h 2006-08-19 02:39:56 UTC (rev 16868) @@ -1,116 +0,0 @@ -/** - * @file gtkstock.h GTK+ Stock resources - * @ingroup gtkui - * - * 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 - */ -#ifndef _GAIM_STOCK_H_ -#define _GAIM_STOCK_H_ - -/**************************************************************************/ -/** @name Stock images */ -/**************************************************************************/ -/*@{*/ -#define GAIM_STOCK_ABOUT "gaim-about" -#define GAIM_STOCK_ACCOUNTS "gaim-accounts" -#define GAIM_STOCK_ACTION "gaim-action" -#define GAIM_STOCK_ALIAS "gaim-alias" -#define GAIM_STOCK_AWAY "gaim-away" -#define GAIM_STOCK_BGCOLOR "gaim-bgcolor" -#define GAIM_STOCK_BLOCK "gaim-block" -#define GAIM_STOCK_CHAT "gaim-chat" -#define GAIM_STOCK_CLEAR "gaim-clear" -#define GAIM_STOCK_CLOSE_TABS "gaim-close-tab" -#define GAIM_STOCK_CONNECT "gaim-connect" -#define GAIM_STOCK_DEBUG "gaim-debug" -#define GAIM_STOCK_DIALOG_AUTH "gaim-dialog-auth" -#define GAIM_STOCK_DIALOG_COOL "gaim-dialog-cool" -#define GAIM_STOCK_DIALOG_ERROR "gaim-dialog-error" -#define GAIM_STOCK_DIALOG_INFO "gaim-dialog-info" -#define GAIM_STOCK_DIALOG_QUESTION "gaim-dialog-question" -#define GAIM_STOCK_DIALOG_WARNING "gaim-dialog-warning" -#define GAIM_STOCK_DISCONNECT "gaim-disconnect" -#define GAIM_STOCK_DOWNLOAD "gaim-download" -#define GAIM_STOCK_EDIT "gaim-edit" -#define GAIM_STOCK_FGCOLOR "gaim-fgcolor" -#define GAIM_STOCK_FILE_CANCELED "gaim-file-canceled" -#define GAIM_STOCK_FILE_DONE "gaim-file-done" -#define GAIM_STOCK_FILE_TRANSFER "gaim-file-transfer" -#define GAIM_STOCK_ICON_AWAY "gaim-icon-away" -#define GAIM_STOCK_ICON_AWAY_MSG "gaim-icon-away-msg" -#define GAIM_STOCK_ICON_CONNECT "gaim-icon-away-connect" -#define GAIM_STOCK_ICON_OFFLINE "gaim-icon-offline" -#define GAIM_STOCK_ICON_ONLINE "gaim-icon-online" -#define GAIM_STOCK_ICON_ONLINE_MSG "gaim-icon-online-msg" -#define GAIM_STOCK_IGNORE "gaim-ignore" -#define GAIM_STOCK_IM "gaim-im" -#define GAIM_STOCK_IMAGE "gaim-image" -#define GAIM_STOCK_INFO "gaim-info" -#define GAIM_STOCK_INVITE "gaim-invite" -#define GAIM_STOCK_LINK "gaim-link" -#define GAIM_STOCK_LOG "gaim-log" -#define GAIM_STOCK_MODIFY "gaim-modify" -#define GAIM_STOCK_OPEN_MAIL "gaim-stock-open-mail" -#define GAIM_STOCK_PAUSE "gaim-pause" -#define GAIM_STOCK_PENDING "gaim-pending" -#define GAIM_STOCK_PLUGIN "gaim-plugin" -#define GAIM_STOCK_POUNCE "gaim-pounce" -#define GAIM_STOCK_SEND "gaim-send" -#define GAIM_STOCK_SIGN_OFF "gaim-sign-off" -#define GAIM_STOCK_SIGN_ON "gaim-sign-on" -#define GAIM_STOCK_SMILEY "gaim-smiley" -#define GAIM_STOCK_STATUS_ONLINE "gaim-status-online" -#define GAIM_STOCK_STATUS_AWAY "gaim-status-away" -#define GAIM_STOCK_STATUS_INVISIBLE "gaim-status-invisible" -#define GAIM_STOCK_STATUS_OFFLINE "gaim-status-offline" -#define GAIM_STOCK_STATUS_TYPING0 "gaim-status-typing0" -#define GAIM_STOCK_STATUS_TYPING1 "gaim-status-typing1" -#define GAIM_STOCK_STATUS_TYPING2 "gaim-status-typing2" -#define GAIM_STOCK_STATUS_TYPING3 "gaim-status-typing3" -#define GAIM_STOCK_STATUS_CONNECT0 "gaim-status-connect0" -#define GAIM_STOCK_STATUS_CONNECT1 "gaim-status-connect1" -#define GAIM_STOCK_STATUS_CONNECT2 "gaim-status-connect2" -#define GAIM_STOCK_STATUS_CONNECT3 "gaim-status-connect3" -#define GAIM_STOCK_TEXT_BIGGER "gaim-text-bigger" -#define GAIM_STOCK_TEXT_NORMAL "gaim-text-normal" -#define GAIM_STOCK_TEXT_SMALLER "gaim-text-smaller" -#define GAIM_STOCK_TYPED "gaim-typed" -#define GAIM_STOCK_TYPING "gaim-typing" -#define GAIM_STOCK_UPLOAD "gaim-upload" -#define GAIM_STOCK_VOICE_CHAT "gaim-voice-chat" -/*@}*/ - -/** - * For using icons that aren't one of the default GTK_ICON_SIZEs - */ -#define GAIM_ICON_SIZE_DIALOG_COOL "gaim-icon-size-dialog-cool" -#define GAIM_ICON_SIZE_LOGO "gaim-icon-size-logo" -#define GAIM_ICON_SIZE_STATUS "gaim-icon-size-status" -#define GAIM_ICON_SIZE_STATUS_TWO_LINE "gaim-icon-size-status-two-line" -#define GAIM_ICON_SIZE_STATUS_SMALL "gaim-icon-size-status-small" -#define GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE "gaim-icon-size-status-small-two-line" - -/** - * Sets up the gaim stock repository. - */ -void gaim_gtk_stock_init(void); - -#endif /* _GAIM_STOCK_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aar...@us...> - 2006-08-19 02:57:10
|
Revision: 16869 Author: aaronsheldon Date: 2006-08-18 19:57:06 -0700 (Fri, 18 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16869&view=rev Log Message: ----------- Re-re-commits r16854, with a few extra useless lines removed. Modified Paths: -------------- trunk/gtk/gaimstock.c trunk/gtk/gaimstock.h Modified: trunk/gtk/gaimstock.c =================================================================== --- trunk/gtk/gaimstock.c 2006-08-19 02:39:56 UTC (rev 16868) +++ trunk/gtk/gaimstock.c 2006-08-19 02:57:06 UTC (rev 16869) @@ -93,7 +93,6 @@ { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, { GAIM_STOCK_LOG, NULL, GTK_STOCK_DND_MULTIPLE }, - { GAIM_STOCK_LOGO, "gaim", "logo.png" }, { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, #if GTK_CHECK_VERSION(2,6,0) { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, @@ -174,42 +173,6 @@ return filename; } -static void -gaim_gtk_stock_versionize(GdkPixbuf **original, GtkWidget *widget) { - GdkPixmap *pixmap; - GtkStyle *style; - PangoContext *context; - PangoLayout *layout; - gchar *markup; - gint width, height; - gint lwidth = 0, lheight = 0; - - style = gtk_widget_get_style(widget); - - gdk_pixbuf_render_pixmap_and_mask(*original, &pixmap, NULL, 255); - width = gdk_pixbuf_get_width(*original); - height = gdk_pixbuf_get_height(*original); - g_object_unref(G_OBJECT(*original)); - - context = gtk_widget_get_pango_context(widget); - layout = pango_layout_new(context); - - markup = g_strdup_printf("<span foreground=\"#FFFFFF\" size=\"larger\">%s</span>", VERSION); - pango_layout_set_font_description(layout, style->font_desc); - pango_layout_set_markup(layout, markup, strlen(markup)); - g_free(markup); - - pango_layout_get_pixel_size(layout, &lwidth, &lheight); - gdk_draw_layout(GDK_DRAWABLE(pixmap), style->bg_gc[GTK_STATE_NORMAL], - width - (lwidth + 3), height - (lheight + 1), layout); - g_object_unref(G_OBJECT(layout)); - - *original = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, - 0, 0, 0, 0, - width, height); - g_object_unref(G_OBJECT(pixmap)); -} - void gaim_gtk_stock_init(void) { @@ -255,9 +218,6 @@ g_free(filename); - if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) - gaim_gtk_stock_versionize(&pixbuf, win); - iconset = gtk_icon_set_new_from_pixbuf(pixbuf); g_object_unref(G_OBJECT(pixbuf)); @@ -271,7 +231,6 @@ gtk_widget_destroy(win); /* register custom icon sizes */ - gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_TWO_LINE, 30, 30); Modified: trunk/gtk/gaimstock.h =================================================================== --- trunk/gtk/gaimstock.h 2006-08-19 02:39:56 UTC (rev 16868) +++ trunk/gtk/gaimstock.h 2006-08-19 02:57:06 UTC (rev 16869) @@ -69,7 +69,6 @@ #define GAIM_STOCK_INVITE "gaim-invite" #define GAIM_STOCK_LINK "gaim-link" #define GAIM_STOCK_LOG "gaim-log" -#define GAIM_STOCK_LOGO "gaim-logo" #define GAIM_STOCK_MODIFY "gaim-modify" #define GAIM_STOCK_OPEN_MAIL "gaim-stock-open-mail" #define GAIM_STOCK_PAUSE "gaim-pause" @@ -105,7 +104,6 @@ * For using icons that aren't one of the default GTK_ICON_SIZEs */ #define GAIM_ICON_SIZE_DIALOG_COOL "gaim-icon-size-dialog-cool" -#define GAIM_ICON_SIZE_LOGO "gaim-icon-size-logo" #define GAIM_ICON_SIZE_STATUS "gaim-icon-size-status" #define GAIM_ICON_SIZE_STATUS_TWO_LINE "gaim-icon-size-status-two-line" #define GAIM_ICON_SIZE_STATUS_SMALL "gaim-icon-size-status-small" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-20 16:50:19
|
Revision: 16905 Author: datallah Date: 2006-08-20 09:49:37 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16905&view=rev Log Message: ----------- First step of getting wingaim working again. libgaim and gtk are compiling. The protocols aren't compiling yet. There are a number of things that are compiling, but should be cleaned up. Modified Paths: -------------- trunk/gtk/gtkmain.c trunk/gtk/gtknotify.c trunk/gtk/gtkprefs.c trunk/gtk/plugins/docklet/Makefile.mingw trunk/gtk/plugins/docklet/docklet-win32.c trunk/gtk/plugins/ticker/Makefile.mingw trunk/gtk/plugins/win32/transparency/Makefile.mingw trunk/gtk/plugins/win32/winprefs/Makefile.mingw trunk/gtk/plugins/win32/winprefs/winprefs.c trunk/gtk/win32/IdleTracker/Makefile.mingw trunk/gtk/win32/gaimrc.rc trunk/libgaim/core.c trunk/libgaim/plugins/perl/Makefile.mingw trunk/libgaim/plugins/ssl/Makefile.mingw trunk/libgaim/plugins/tcl/Makefile.mingw Added Paths: ----------- trunk/gtk/Makefile.mingw trunk/gtk/plugins/Makefile.mingw trunk/gtk/plugins/win32/ trunk/gtk/win32/gtkwin32dep.c trunk/gtk/win32/gtkwin32dep.h trunk/gtk/win32/win_gaim.c trunk/libgaim/Makefile.mingw trunk/libgaim/plugins/Makefile.mingw trunk/libgaim/win32/ trunk/libgaim/win32/global.mak trunk/libgaim/win32/libc_interface.c trunk/libgaim/win32/libc_interface.h trunk/libgaim/win32/libc_internal.h trunk/libgaim/win32/wgaimerror.h trunk/libgaim/win32/win32dep.c trunk/libgaim/win32/win32dep.h Removed Paths: ------------- trunk/gtk/win32/global.mak trunk/gtk/win32/libc_interface.c trunk/gtk/win32/libc_interface.h trunk/gtk/win32/libc_internal.h trunk/gtk/win32/wgaimerror.h trunk/gtk/win32/win32dep.c trunk/gtk/win32/win32dep.h Property Changed: ---------------- trunk/gtk/ trunk/gtk/plugins/ trunk/gtk/plugins/win32/transparency/ trunk/gtk/plugins/win32/winprefs/ trunk/gtk/win32/IdleTracker/ trunk/libgaim/ trunk/libgaim/plugins/ Property changes on: trunk/gtk ___________________________________________________________________ Name: svn:ignore - Makefile.in .deps Makefile + Makefile.in .deps Makefile *.dll gtkgaim.dll.a *.exe Added: trunk/gtk/Makefile.mingw =================================================================== --- trunk/gtk/Makefile.mingw (rev 0) +++ trunk/gtk/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -0,0 +1,229 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Gaim +# + +# +# PATHS +# + +GTK_TOP := ../../win32-dev/gtk_2_0 +GAIM_TOP := .. +GTKGAIM_TOP := . +LIBGAIM_TOP := ../libgaim +ASPELL_TOP := ../../win32-dev/aspell-dev-0-50-3-3 +GTKSPELL_TOP := ../../win32-dev/gtkspell-2.0.6 +IDLETRACK_TOP := $(GTKGAIM_TOP)/win32/IdleTracker +GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir +#LIBXML2_DIR := ../../win32-dev/libxml2 + +## +## VARIABLE DEFINITIONS +## + +EXE_TARGET = gaim + +GTKGAIM_TARGET = gtkgaim + +# Compiler and Linker Options + +CFLAGS = + +DEFINES = + +ifeq ($(MAKECMDGOALS), $(EXE_TARGET)-portable.exe) +DEFINES := $(DEFINES) -DPORTABLE +endif + +WINAPP := -mwindows +# The Debug version of gaim is a console app, always having a console +CONSOLEAPP := -mconsole + +LDFLAGS := $(WINAPP) + +WINDRES := windres + +## +## INCLUDE MAKEFILES +## + +include $(LIBGAIM_TOP)/win32/global.mak + +## +## INCLUDE PATHS +## + +LIBGAIM_INCLUDE_PATHS = \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ + -I$(GAIM_TOP) \ + -I$(GTK_TOP)/include \ + -I$(GTK_TOP)/include/glib-2.0 \ + -I$(GTK_TOP)/lib/glib-2.0/include + +# -I$(LIBXML2_DIR)/include + +INCLUDE_PATHS = \ + $(LIBGAIM_INCLUDE_PATHS) \ + -I$(IDLETRACK_TOP) \ + -I$(GTKGAIM_TOP) \ + -I$(GTKGAIM_TOP)/win32 \ + -I$(GTK_TOP)/include/gtk-2.0 \ + -I$(GTK_TOP)/include/pango-1.0 \ + -I$(GTK_TOP)/include/atk-1.0 \ + -I$(GTK_TOP)/lib/gtk-2.0/include \ + -I$(GTKSPELL_TOP) \ + -I$(ASPELL_TOP)/include + + + +LIB_PATHS = -L$(GTK_TOP)/lib \ + -L$(LIBGAIM_TOP) \ + -L$(GTKGAIM_TOP) \ + -L$(IDLETRACK_TOP) \ + -L$(ASPELL_TOP)/lib + +# -L$(LIBXML2_DIR)/lib + +## +## SOURCES, OBJECTS +## + +GTKGAIM_C_SRC = \ + gaimstock.c \ + gtkaccount.c \ + gtkblist.c \ + gtkconn.c \ + gtkconv.c \ + gtkcellrendererprogress.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 \ + gtkpounce.c \ + gtkprefs.c \ + gtkprivacy.c \ + gtkrequest.c \ + gtkroomlist.c \ + gtksavedstatuses.c \ + gtksound.c \ + gtksourceiter.c \ + gtkstatusbox.c \ + gtkthemes.c \ + gtkutils.c \ + gtkwhiteboard.c \ + win32/gtkwin32dep.c \ + win32/untar.c \ + win32/wspell.c + +RC_SRC = win32/gaimrc.rc + +EXE_C_SRC = win32/win_gaim.c + +GTKGAIM_OBJECTS = $(GTKGAIM_C_SRC:%.c=%.o) + +EXE_OBJECTS = $(EXE_C_SRC:%.c=%.o) $(RC_SRC:%.rc=%.o) + +## +## LIBRARIES +## + +LIBGAIM_LIBS = \ + -lgaim \ + -lglib-2.0 \ + -lgthread-2.0 \ + -lgobject-2.0 \ + -lgmodule-2.0 \ + -lintl \ + -lws2_32 \ + -lwinmm \ + -lz \ + -liberty \ + -lidletrack + +# -lxml2 + +GTKGAIM_LIBS = \ + $(LIBGAIM_LIBS) \ + -lgtk-win32-2.0 \ + -latk-1.0 \ + -lpango-1.0 \ + -lgdk-win32-2.0 \ + -lgdk_pixbuf-2.0 + +EXE_LIBS = + +## +## RULES +## + +# How to make a C file +%.o: %.c + $(CC) $(CFLAGS) $(INCLUDE_PATHS) $(DEFINES) -c $< -o $@ + +# How to make an RC file +%.o: %.rc + $(WINDRES) -i $< -o $@ + +## +## TARGET DEFINITIONS +## + +.PHONY: all clean libgaim_include_path gtkgaim_include_path + +all: $(EXE_TARGET).exe $(GTKGAIM_TARGET).dll + +install: all + cp $(GTKGAIM_TOP)/$(EXE_TARGET).exe $(GTKGAIM_TOP)/$(GTKGAIM_TARGET).dll $(GAIM_INSTALL_DIR) + +$(LIBGAIM_TOP)/libgaim.dll.a: + S(MAKE) -C $(LIBGAIM_TOP) -f Makefile.mingw libgaim.dll.a + +$(IDLETRACK_TOP)/idletrack.dll: + $(MAKE) -C $(IDLETRACK_TOP) -f Makefile.mingw + +# +# BUILD DLL +# +#$(GTKGAIM_TARGET).dll.a $(GTKGAIM_TARGET).dll: INCLUDE_PATHS = $(GTKGAIM_INCLUDE_PATHS) +#Once the UI split has finished for server.c, this will be the correct line +#$(GTKGAIM_TARGET).dll.a $(GTKGAIM_TARGET).dll: $(LIBGAIM_TARGET).dll.a $(GTKGAIM_OBJECTS) +$(GTKGAIM_TARGET).dll.a $(GTKGAIM_TARGET).dll: $(LIBGAIM_TOP)/libgaim.dll.a $(GTKGAIM_OBJECTS) $(IDLETRACK_TOP)/idletrack.dll + $(CC) -shared $(LIBGAIM_OBJECTS) $(GTKGAIM_OBJECTS) $(LIB_PATHS) $(GTKGAIM_LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(GTKGAIM_TARGET).dll.a -o $(GTKGAIM_TARGET).dll + +# +# BUILD EXE +# + +$(EXE_TARGET).exe: $(GTKGAIM_TARGET).dll $(EXE_OBJECTS) + $(CC) $(LDFLAGS) $(EXE_OBJECTS) $(LIB_PATHS) $(EXE_LIBS) -o $(EXE_TARGET).exe + +$(EXE_TARGET)-portable.exe: clean_exe $(EXE_OBJECTS) + $(CC) $(LDFLAGS) $(EXE_OBJECTS) $(LIB_PATHS) $(EXE_LIBS) -o $(EXE_TARGET)-portable.exe + rm win_gaim.o + +## +## CLEAN RULES +## + +clean: + $(MAKE) -C $(IDLETRACK_TOP) -f Makefile.mingw clean + rm -rf *.o ./win32/*.o + rm -rf $(GTKGAIM_TARGET).dll + rm -rf $(GTKGAIM_TARGET).dll.a + rm -rf $(EXE_TARGET).exe + +clean_exe: + rm -rf win_gaim.o Property changes on: trunk/gtk/Makefile.mingw ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/gtk/gtkmain.c =================================================================== --- trunk/gtk/gtkmain.c 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/gtkmain.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -78,7 +78,7 @@ #endif #ifdef _WIN32 -# include "wspell.h" +# include "gtkwin32dep.h" #endif @@ -635,9 +635,6 @@ gaim_debug_set_enabled(debug_enabled); -#ifdef _WIN32 - wgaim_init(hint); -#endif search_path = g_build_filename(gaim_user_dir(), "gtkrc-2.0", NULL); gtk_rc_add_default_file(search_path); @@ -668,11 +665,7 @@ } #ifdef _WIN32 - /** TODO: Move this to a wgaim_gtk_init() if we need such a thing */ - wgaim_gtkspell_init(); - gaim_debug_info("wgaim", "GTK+ :%u.%u.%u\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - + gtkwgaim_init(hint); #endif gaim_core_set_ui_ops(gaim_gtk_core_get_ui_ops()); @@ -784,7 +777,7 @@ #endif #ifdef _WIN32 - wgaim_cleanup(); + gtkwgaim_cleanup(); #endif return 0; Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/gtknotify.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -38,6 +38,10 @@ #include "gtknotify.h" #include "gtkutils.h" +#ifdef _WIN32 +# include "gtkwin32dep.h" +#endif + typedef struct { GaimConnection *gc; @@ -116,7 +120,7 @@ if (id == GTK_RESPONSE_YES) { GtkTreeSelection *selection; - + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); if (gtk_tree_selection_get_selected(selection, NULL, &iter)) @@ -762,7 +766,7 @@ gaim_notify_searchresults_column_get_title(results, i-1), renderer, "text", i, NULL); } - + /* Setup the button area */ button_area = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(vbox), button_area, FALSE, FALSE, 0); @@ -1072,7 +1076,7 @@ g_free(command); #else /* !_WIN32 */ - wgaim_notify_uri(uri); + gtkwgaim_notify_uri(uri); #endif /* !_WIN32 */ return NULL; Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/gtkprefs.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -50,6 +50,10 @@ #include "gtkutils.h" #include "gaimstock.h" +#ifdef _WIN32 +# include "gtkwin32dep.h" +#endif + #define PROXYHOST 0 #define PROXYPORT 1 #define PROXYUSER 2 @@ -494,7 +498,7 @@ g_free(path_escaped); g_free(destdir_escaped); #else - if(!wgaim_gz_untar(path, destdir)) { + if(!gtkwgaim_gz_untar(path, destdir)) { g_free(destdir); return; } Property changes on: trunk/gtk/plugins ___________________________________________________________________ Name: svn:ignore - Makefile.in .deps Makefile + Makefile.in .deps Makefile *.dll Added: trunk/gtk/plugins/Makefile.mingw =================================================================== --- trunk/gtk/plugins/Makefile.mingw (rev 0) +++ trunk/gtk/plugins/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -0,0 +1,136 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Gaim Plugins +# + +# +# PATHS +# + +GAIM_PLUGINS := . +GAIM_TOP := ../.. +GTKGAIM_TOP := .. +LIBGAIM_TOP := $(GAIM_TOP)/libgaim +GTK_TOP := ../../../win32-dev/gtk_2_0 +#OSCAR_ROOT := ../src/protocols/oscar +GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir +TICKER := ./ticker +TRANSPARENCY := ./win32/transparency +WINPREFS := ./win32/winprefs +#PERL_PLUGIN_LOADER := ./perl +DOCKLET := ./docklet + +## +## VARIABLE DEFINITIONS +## + +# Compiler Options + +CFLAGS = + +DEFINES = + +.SUFFIXES: +.SUFFIXES: .c .dll + +## +## INCLUDE MAKEFILES +## + +include $(LIBGAIM_TOP)/win32/global.mak + +## +## INCLUDE PATHS +## + +INCLUDE_PATHS += \ + -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$(GAIM_TOP) \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ + -I$(GTKGAIM_TOP) \ + -I$(GTKGAIM_TOP)/win32 + + +LIB_PATHS = -L$(GTK_TOP)/lib \ + -L$(LIBGAIM_TOP) \ + -L$(GTKGAIM_TOP) + + +## +## LIBRARIES +## + +LIBS = -lgtk-win32-2.0 \ + -lglib-2.0 \ + -lgdk-win32-2.0 \ + -lgobject-2.0 \ + -lgmodule-2.0 \ + -lgdk_pixbuf-2.0 \ + -lpango-1.0 \ + -lintl \ + -lws2_32 \ + -lgaim \ + -lgtkgaim + +## +## RULES +## + +## +## TARGET DEFINITIONS +## + +.PHONY: all clean + +all: plugins + $(MAKE) -C $(TICKER) -f Makefile.mingw + $(MAKE) -C $(WINPREFS) -f Makefile.mingw + $(MAKE) -C $(TRANSPARENCY) -f Makefile.mingw + $(MAKE) -C $(DOCKLET) -f Makefile.mingw + +install: + cp $(GAIM_PLUGINS)/*.dll $(GAIM_INSTALL_DIR)/plugins + $(MAKE) -C $(TICKER) -f Makefile.mingw install + $(MAKE) -C $(WINPREFS) -f Makefile.mingw install + $(MAKE) -C $(TRANSPARENCY) -f Makefile.mingw install + $(MAKE) -C $(DOCKLET) -f Makefile.mingw install + +# +# BUILD Plugin +# + +.c.dll: + $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@.o -c $< + $(CC) -shared $@.o $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $@ + +plugins: \ + extplacement.dll \ + gaimrc.dll \ + history.dll \ + iconaway.dll \ + notify.dll \ + relnot.dll \ + spellchk.dll \ + timestamp_format.dll \ + timestamp.dll + + +## +## CLEAN RULES +## + +clean: + rm -rf *.o + rm -rf *.dll + $(MAKE) -C $(TICKER) -f Makefile.mingw clean + $(MAKE) -C $(TRANSPARENCY) -f Makefile.mingw clean + $(MAKE) -C $(WINPREFS) -f Makefile.mingw clean + $(MAKE) -C $(DOCKLET) -f Makefile.mingw clean Property changes on: trunk/gtk/plugins/Makefile.mingw ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/gtk/plugins/docklet/Makefile.mingw =================================================================== --- trunk/gtk/plugins/docklet/Makefile.mingw 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/plugins/docklet/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -8,8 +8,10 @@ # PATHS # -GTK_TOP := ../../../win32-dev/gtk_2_0 -GAIM_TOP := ../.. +GTK_TOP := ../../../../win32-dev/gtk_2_0 +GAIM_TOP := ../../.. +LIBGAIM_TOP := $(GAIM_TOP)/libgaim +GTKGAIM_TOP := $(GAIM_TOP)/gtk GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir DLL_INSTALL_DIR := $(GAIM_INSTALL_DIR)/plugins @@ -29,7 +31,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -43,13 +45,16 @@ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ + -I$(GTKGAIM_TOP) \ + -I$(GTKGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) \ + -L$(GTKGAIM_TOP) ## @@ -71,11 +76,10 @@ LIBS = -lgtk-win32-2.0 \ -lglib-2.0 \ -lgdk-win32-2.0 \ - -lgmodule-2.0 \ -lgobject-2.0 \ - -lws2_32 \ -lintl \ - -lgaim + -lgaim \ + -lgtkgaim ## @@ -103,14 +107,15 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(GTKGAIM_TOP)/gtkgaim.dll.a: + $(MAKE) -C $(GTKGAIM_TOP) -f Makefile.mingw gtkgaim.dll.a + ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib +$(TARGET).dll: $(OBJECTS) $(GTKGAIM_TOP)/gtkgaim.dll.a $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## Modified: trunk/gtk/plugins/docklet/docklet-win32.c =================================================================== --- trunk/gtk/plugins/docklet/docklet-win32.c 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/plugins/docklet/docklet-win32.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -36,6 +36,7 @@ #include "resource.h" #include "MinimizeToTray.h" +#include "gtkwin32dep.h" #include "docklet.h" /* @@ -115,7 +116,7 @@ wcex.lpfnWndProc = (WNDPROC)systray_mainmsg_handler; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; - wcex.hInstance = wgaim_hinstance(); + wcex.hInstance = gtkwgaim_hinstance(); wcex.hIcon = NULL; wcex.hCursor = NULL, wcex.hbrBackground = NULL; @@ -126,7 +127,7 @@ RegisterClassEx(&wcex); /* Create the window */ - return (CreateWindow(wname, "", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, wgaim_hinstance(), 0)); + return (CreateWindow(wname, "", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, gtkwgaim_hinstance(), 0)); } static void systray_init_icon(HWND hWnd, HICON icon) { @@ -212,19 +213,19 @@ * but will scale it back to 4-bits for display. * That is why we use custom 4-bit icons for pre XP Windowses */ if (osinfo.dwMajorVersion == 5 && osinfo.dwMinorVersion > 0) { - sysicon_disconn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_OFFLINE_TRAY_ICON), IMAGE_ICON, 16, 16, 0); - sysicon_conn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_TRAY_ICON), IMAGE_ICON, 16, 16, 0); - sysicon_away = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAY_TRAY_ICON), IMAGE_ICON, 16, 16, 0); - sysicon_pend = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_PEND_TRAY_ICON), IMAGE_ICON, 16, 16, 0); - sysicon_awypend = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAYPEND_TRAY_ICON), IMAGE_ICON, 16, 16, 0); + sysicon_disconn = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_OFFLINE_TRAY_ICON), IMAGE_ICON, 16, 16, 0); + sysicon_conn = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_TRAY_ICON), IMAGE_ICON, 16, 16, 0); + sysicon_away = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAY_TRAY_ICON), IMAGE_ICON, 16, 16, 0); + sysicon_pend = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_PEND_TRAY_ICON), IMAGE_ICON, 16, 16, 0); + sysicon_awypend = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAYPEND_TRAY_ICON), IMAGE_ICON, 16, 16, 0); } else { - sysicon_disconn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_OFFLINE_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); - sysicon_conn = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); - sysicon_away = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAY_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); - sysicon_pend = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_PEND_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); - sysicon_awypend = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAYPEND_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); + sysicon_disconn = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_OFFLINE_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); + sysicon_conn = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); + sysicon_away = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAY_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); + sysicon_pend = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_PEND_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); + sysicon_awypend = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_AWAYPEND_TRAY_ICON_4BIT), IMAGE_ICON, 16, 16, 0); } - sysicon_blank = (HICON)LoadImage(wgaim_hinstance(), MAKEINTRESOURCE(GAIM_BLANK_TRAY_ICON), IMAGE_ICON, 16, 16, 0); + sysicon_blank = (HICON)LoadImage(gtkwgaim_hinstance(), MAKEINTRESOURCE(GAIM_BLANK_TRAY_ICON), IMAGE_ICON, 16, 16, 0); /* Create icon in systray */ systray_init_icon(systray_hwnd, sysicon_disconn); Modified: trunk/gtk/plugins/ticker/Makefile.mingw =================================================================== --- trunk/gtk/plugins/ticker/Makefile.mingw 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/plugins/ticker/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -8,10 +8,10 @@ # PATHS # -INCLUDE_DIR := . - -GTK_TOP := ../../../win32-dev/gtk_2_0 -GAIM_TOP := ../.. +GTK_TOP := ../../../../win32-dev/gtk_2_0 +GAIM_TOP := ../../.. +GTKGAIM_TOP := $(GAIM_TOP)/gtk +LIBGAIM_TOP := $(GAIM_TOP)/libgaim TICKER_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir DLL_INSTALL_DIR := $(GAIM_INSTALL_DIR)/plugins @@ -33,7 +33,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -47,13 +47,16 @@ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ + -I$(GTKGAIM_TOP) \ + -I$(GTKGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) \ + -L$(GTKGAIM_TOP) ## @@ -76,9 +79,9 @@ -lgdk-win32-2.0 \ -lgmodule-2.0 \ -lgobject-2.0 \ - -lws2_32 \ -lintl \ - -lgaim + -lgaim \ + -lgtkgaim ## ## RULES @@ -105,14 +108,14 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(GTKGAIM_TOP)/gtkgaim.dll.a: + $(MAKE) -C $(GTKGAIM_TOP) -f Makefile.mingw gtkgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib +$(TARGET).dll: $(OBJECTS) $(GTKGAIM_TOP)/gtkgaim.dll.a $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## Copied: trunk/gtk/plugins/win32 (from rev 16858, trunk/plugins/win32) Property changes on: trunk/gtk/plugins/win32/transparency ___________________________________________________________________ Name: svn:ignore - win2ktrans.dll win2ktrans.def + win2ktrans.dll Modified: trunk/gtk/plugins/win32/transparency/Makefile.mingw =================================================================== --- trunk/plugins/win32/transparency/Makefile.mingw 2006-08-19 01:29:53 UTC (rev 16858) +++ trunk/gtk/plugins/win32/transparency/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -8,8 +8,10 @@ # PATHS # -GTK_TOP := ../../../../win32-dev/gtk_2_0 -GAIM_TOP := ../../.. +GTK_TOP := ../../../../../win32-dev/gtk_2_0 +GAIM_TOP := ../../../.. +LIBGAIM_TOP := ../../../../libgaim +GTKGAIM_TOP := ../../../../gtk GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir DLL_INSTALL_DIR := $(GAIM_INSTALL_DIR)/plugins @@ -23,13 +25,14 @@ CFLAGS = -DEFINES = +# This plugin requires W2K+ API +DEFINES = -D_WIN32_WINNT=0x0500 ## ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -43,13 +46,16 @@ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ + -I$(GTKGAIM_TOP) \ + -I$(GTKGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) \ + -L$(GTKGAIM_TOP) ## @@ -71,8 +77,8 @@ -lgdk-win32-2.0 \ -lgmodule-2.0 \ -lgobject-2.0 \ - -lws2_32 \ -lintl \ + -lgtkgaim \ -lgaim @@ -93,7 +99,7 @@ all: $(TARGET).dll -install: +install: all cp $(TARGET).dll $(DLL_INSTALL_DIR) @@ -101,14 +107,14 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(GTKGAIM_TOP)/gtkgaim.dll.a: + $(MAKE) -C $(GTKGAIM_TOP) -f Makefile.mingw gtkgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib +$(TARGET).dll: $(OBJECTS) $(GTKGAIM_TOP)/gtkgaim.dll.a $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## Property changes on: trunk/gtk/plugins/win32/winprefs ___________________________________________________________________ Name: svn:ignore - winprefs.dll winprefs.def + winprefs.dll Modified: trunk/gtk/plugins/win32/winprefs/Makefile.mingw =================================================================== --- trunk/plugins/win32/winprefs/Makefile.mingw 2006-08-19 01:29:53 UTC (rev 16858) +++ trunk/gtk/plugins/win32/winprefs/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -8,8 +8,10 @@ # PATHS # -GTK_TOP := ../../../../win32-dev/gtk_2_0 -GAIM_TOP := ../../.. +GTK_TOP := ../../../../../win32-dev/gtk_2_0 +GAIM_TOP := ../../../.. +LIBGAIM_TOP := $(GAIM_TOP)/libgaim +GTKGAIM_TOP := $(GAIM_TOP)/gtk GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir DLL_INSTALL_DIR := $(GAIM_INSTALL_DIR)/plugins @@ -29,7 +31,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -43,13 +45,16 @@ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ - -I$(GAIM_TOP)/src \ - -I$(GAIM_TOP)/src/win32 \ + -I$(LIBGAIM_TOP) \ + -I$(LIBGAIM_TOP)/win32 \ + -I$(GTKGAIM_TOP) \ + -I$(GTKGAIM_TOP)/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ - -L$(GAIM_TOP)/src + -L$(LIBGAIM_TOP) \ + -L$(GTKGAIM_TOP) ## @@ -74,7 +79,8 @@ -lgobject-2.0 \ -lws2_32 \ -lintl \ - -lgaim + -lgaim \ + -lgtkgaim ## @@ -102,14 +108,14 @@ ## BUILD Dependencies ## -$(GAIM_TOP)/src/gaim.lib: - $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib +$(GTKGAIM_TOP)/gtkgaim.dll.a: + $(MAKE) -C $(GTKGAIM_TOP) -f Makefile.mingw gtkgaim.dll.a ## ## BUILD DLL ## -$(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib +$(TARGET).dll: $(OBJECTS) $(GTKGAIM_TOP)/gtkgaim.dll.a $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll ## Modified: trunk/gtk/plugins/win32/winprefs/winprefs.c =================================================================== --- trunk/plugins/win32/winprefs/winprefs.c 2006-08-19 01:29:53 UTC (rev 16858) +++ trunk/gtk/plugins/win32/winprefs/winprefs.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -25,6 +25,8 @@ #include "internal.h" +#include "gtkwin32dep.h" + #include "core.h" #include "debug.h" #include "prefs.h" @@ -237,7 +239,7 @@ char buffer[1024]; DWORD size; - if((size = GetModuleFileName(wgaim_hinstance(), + if((size = GetModuleFileName(gtkwgaim_hinstance(), (LPBYTE) buffer , sizeof(buffer))) == 0) { gaim_debug_error(WINPREFS_PLUGIN_ID, "GetModuleFileName Error. Could not set Gaim autostart.\n"); RegCloseKey(hKey); @@ -558,3 +560,4 @@ } GAIM_INIT_PLUGIN(winprefs, init_plugin, info) + Property changes on: trunk/gtk/win32/IdleTracker ___________________________________________________________________ Name: svn:ignore - idletrack.def idletrack.lib idletrack.dll + idletrack.dll idletrack.dll.a Modified: trunk/gtk/win32/IdleTracker/Makefile.mingw =================================================================== --- trunk/gtk/win32/IdleTracker/Makefile.mingw 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/win32/IdleTracker/Makefile.mingw 2006-08-20 16:49:37 UTC (rev 16905) @@ -9,6 +9,7 @@ # GAIM_TOP := ../../.. +LIBGAIM_TOP := $(GAIM_TOP)/libgaim GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir ## @@ -27,7 +28,7 @@ ## INCLUDE MAKEFILES ## -include $(GAIM_TOP)/src/win32/global.mak +include $(LIBGAIM_TOP)/win32/global.mak ## ## INCLUDE PATHS @@ -77,7 +78,7 @@ ## $(TARGET).dll: $(OBJECTS) - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).dll.a -o $(TARGET).dll ## ## CLEAN RULES @@ -86,5 +87,4 @@ clean: rm -rf *.o rm -rf $(TARGET).dll - rm -rf $(TARGET).lib - rm -rf $(TARGET).def + rm -rf $(TARGET).dll.a Modified: trunk/gtk/win32/gaimrc.rc =================================================================== --- trunk/gtk/win32/gaimrc.rc 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/win32/gaimrc.rc 2006-08-20 16:49:37 UTC (rev 16905) @@ -1,14 +1,16 @@ #include "resource.h" -GAIM_ICON ICON "../pixmaps/gaim.ico" -GAIM_TRAY_ICON ICON "../pixmaps/gaim_16.ico" -GAIM_OFFLINE_TRAY_ICON ICON "../pixmaps/gaim_offline_16.ico" -GAIM_AWAY_TRAY_ICON ICON "../pixmaps/gaim_away_16.ico" -GAIM_PEND_TRAY_ICON ICON "../pixmaps/gaim_msgunread_16.ico" -GAIM_AWAYPEND_TRAY_ICON ICON "../pixmaps/gaim_msgpend_16.ico" -GAIM_BLANK_TRAY_ICON ICON "../pixmaps/gaim_blank_4bit_16.ico" -GAIM_TRAY_ICON_4BIT ICON "../pixmaps/gaim_4bit_16.ico" -GAIM_OFFLINE_TRAY_ICON_4BIT ICON "../pixmaps/gaim_offline_4bit_16.ico" -GAIM_AWAY_TRAY_ICON_4BIT ICON "../pixmaps/gaim_away_4bit_16.ico" -GAIM_PEND_TRAY_ICON_4BIT ICON "../pixmaps/gaim_msgunread_4bit_16.ico" -GAIM_AWAYPEND_TRAY_ICON_4BIT ICON "../pixmaps/gaim_msgpend_4bit_16.ico" +#define PIXMAPDIR "pixmaps/" + +GAIM_ICON ICON PIXMAPDIR "gaim.ico" +GAIM_TRAY_ICON ICON PIXMAPDIR "gaim_16.ico" +GAIM_OFFLINE_TRAY_ICON ICON PIXMAPDIR "gaim_offline_16.ico" +GAIM_AWAY_TRAY_ICON ICON PIXMAPDIR "gaim_away_16.ico" +GAIM_PEND_TRAY_ICON ICON PIXMAPDIR "gaim_msgunread_16.ico" +GAIM_AWAYPEND_TRAY_ICON ICON PIXMAPDIR "gaim_msgpend_16.ico" +GAIM_BLANK_TRAY_ICON ICON PIXMAPDIR "gaim_blank_4bit_16.ico" +GAIM_TRAY_ICON_4BIT ICON PIXMAPDIR "gaim_4bit_16.ico" +GAIM_OFFLINE_TRAY_ICON_4BIT ICON PIXMAPDIR "gaim_offline_4bit_16.ico" +GAIM_AWAY_TRAY_ICON_4BIT ICON PIXMAPDIR "gaim_away_4bit_16.ico" +GAIM_PEND_TRAY_ICON_4BIT ICON PIXMAPDIR "gaim_msgunread_4bit_16.ico" +GAIM_AWAYPEND_TRAY_ICON_4BIT ICON PIXMAPDIR "gaim_msgpend_4bit_16.ico" Deleted: trunk/gtk/win32/global.mak =================================================================== --- trunk/gtk/win32/global.mak 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/win32/global.mak 2006-08-20 16:49:37 UTC (rev 16905) @@ -1,25 +0,0 @@ -# -# global.mak -# -# This file should be included by all Makefile.mingw files for project -# wide definitions. -# - -CC = gcc.exe - -# Use -g flag when building debug version of Gaim (including plugins). -# Use -fnative-struct instead of -mms-bitfields when using mingw 1.1 -# (gcc 2.95) -CFLAGS += -O2 -Wall -pipe -mno-cygwin -mms-bitfields - -# If not specified, dlls are built with the default base address of 0x10000000. -# When loaded into a process address space a dll will be rebased if its base -# address colides with the base address of an existing dll. To avoid rebasing -# we do the following. Rebasing can slow down the load time of dlls and it -# also renders debug info useless. -DLL_LD_FLAGS += -Wl,--enable-auto-image-base - -VERSION := $(shell cat $(GAIM_TOP)/VERSION) - -DEFINES += -DVERSION=\"$(VERSION)\" \ - -DHAVE_CONFIG_H Added: trunk/gtk/win32/gtkwin32dep.c =================================================================== --- trunk/gtk/win32/gtkwin32dep.c (rev 0) +++ trunk/gtk/win32/gtkwin32dep.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -0,0 +1,202 @@ +/* + * gaim + * + * File: gtkwin32dep.c + * Date: June, 2002 + * Description: Windows dependant code for Gaim + * + * Copyright (C) 2002-2003, Herman Bloggs <her...@ya...> + * + * 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 + * + */ +#define _WIN32_IE 0x500 +#include <windows.h> +#include <io.h> +#include <stdlib.h> +#include <stdio.h> +#include <winuser.h> + +#include <glib.h> +#include <glib/gstdio.h> +#include <gtk/gtk.h> + +#include "gaim.h" +#include "debug.h" +#include "notify.h" + +#include "resource.h" +#include "idletrack.h" +#include "zlib.h" +#include "untar.h" + +#include <libintl.h> + +#include "gtkwin32dep.h" + +#include "wspell.h" + +/* + * GLOBALS + */ +HINSTANCE gaimexe_hInstance = 0; +HINSTANCE gtkgaimdll_hInstance = 0; + +/* + * PUBLIC CODE + */ + +HINSTANCE gtkwgaim_hinstance(void) { + return gaimexe_hInstance; +} + +int gtkwgaim_gz_decompress(const char* in, const char* out) { + gzFile fin; + FILE *fout; + char buf[1024]; + int ret; + + if((fin = gzopen(in, "rb"))) { + if(!(fout = g_fopen(out, "wb"))) { + gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_decompress", "Error opening file: %s\n", out); + gzclose(fin); + return 0; + } + } + else { + gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_decompress", "gzopen failed to open: %s\n", in); + return 0; + } + + while((ret = gzread(fin, buf, 1024))) { + if(fwrite(buf, 1, ret, fout) < ret) { + gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_decompress", "Error writing %d bytes to file\n", ret); + gzclose(fin); + fclose(fout); + return 0; + } + } + fclose(fout); + gzclose(fin); + + if(ret < 0) { + gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_decompress", "gzread failed while reading: %s\n", in); + return 0; + } + + return 1; +} + +int gtkwgaim_gz_untar(const char* filename, const char* destdir) { + char tmpfile[_MAX_PATH]; + char template[]="wgaimXXXXXX"; + + sprintf(tmpfile, "%s%s%s", g_get_tmp_dir(), G_DIR_SEPARATOR_S, _mktemp(template)); + if(gtkwgaim_gz_decompress(filename, tmpfile)) { + int ret; + if(untar(tmpfile, destdir, UNTAR_FORCE | UNTAR_QUIET)) + ret = 1; + else { + gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_untar", "Failure untaring %s\n", tmpfile); + ret = 0; + } + g_unlink(tmpfile); + return ret; + } + else { + gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_untar", "Failed to gz decompress %s\n", filename); + return 0; + } +} + +void gtkwgaim_notify_uri(const char *uri) { + + /* We'll allow whatever URI schemes are supported by the + * default http browser. + */ + + if (G_WIN32_HAVE_WIDECHAR_API()) { + SHELLEXECUTEINFOW wsinfo; + wchar_t *w_uri; + + w_uri = g_utf8_to_utf16(uri, -1, NULL, NULL, NULL); + + memset(&wsinfo, 0, sizeof(wsinfo)); + wsinfo.cbSize = sizeof(wsinfo); + wsinfo.fMask = SEE_MASK_CLASSNAME; + wsinfo.lpVerb = L"open"; + wsinfo.lpFile = w_uri; + wsinfo.nShow = SW_SHOWNORMAL; + wsinfo.lpClass = L"http"; + + gaim_debug(GAIM_DEBUG_INFO, "wgaim_notify_uri", "The wide uri is %s\n", uri); + if(!ShellExecuteExW(&wsinfo)) + gaim_debug_error("wgaim", "Error opening URI: %s error: %d\n", + uri, (int) wsinfo.hInstApp); + + g_free(w_uri); + } else { + SHELLEXECUTEINFOA sinfo; + gchar *locale_uri; + + locale_uri = g_locale_from_utf8(uri, -1, NULL, NULL, NULL); + + memset(&sinfo, 0, sizeof(sinfo)); + sinfo.cbSize = sizeof(sinfo); + sinfo.fMask = SEE_MASK_CLASSNAME; + sinfo.lpVerb = "open"; + sinfo.lpFile = locale_uri; + sinfo.nShow = SW_SHOWNORMAL; + sinfo.lpClass = "http"; + + if(!ShellExecuteExA(&sinfo)) + gaim_debug_error("wgaim", "Error opening URI: %s error: %d\n", + uri, (int) sinfo.hInstApp); + + g_free(locale_uri); + } +} + +void gtkwgaim_init(HINSTANCE hint) { + gaim_debug_info("gtkwgaim", "gtkwgaim_init start\n"); + + gaimexe_hInstance = hint; + + /* IdleTracker Initialization */ + if(!wgaim_set_idlehooks()) + gaim_debug(GAIM_DEBUG_ERROR, "gtkwgaim", "Failed to initialize idle tracker\n"); + + wgaim_gtkspell_init(); + gaim_debug_info("gtkwgaim", "GTK+ :%u.%u.%u\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + + gaim_debug(GAIM_DEBUG_INFO, "gtkwgaim", "gtkwgaim_init end\n"); +} + +/* Windows Cleanup */ + +void gtkwgaim_cleanup(void) { + gaim_debug(GAIM_DEBUG_INFO, "gtkwgaim", "gtkwgaim_cleanup\n"); + + /* Idle tracker cleanup */ + wgaim_remove_idlehooks(); + +} + +/* DLL initializer */ +BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { + gtkgaimdll_hInstance = hinstDLL; + return TRUE; +} Property changes on: trunk/gtk/win32/gtkwin32dep.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/gtk/win32/gtkwin32dep.h =================================================================== --- trunk/gtk/win32/gtkwin32dep.h (rev 0) +++ trunk/gtk/win32/gtkwin32dep.h 2006-08-20 16:49:37 UTC (rev 16905) @@ -0,0 +1,40 @@ +/* + * gaim + * + * File: win32dep.h + * + * Copyright (C) 2002-2003, Herman Bloggs <her...@ya...> + * + * 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 + * + */ +#ifndef _GTKWIN32DEP_H_ +#define _GTKWIN32DEP_H_ + +HINSTANCE gtkwgaim_hinstance(void); + +/* Utility */ +int gtkwgaim_gz_decompress(const char* in, const char* out); +int gtkwgaim_gz_untar(const char* filename, const char* destdir); + +/* Misc */ +void gtkwgaim_notify_uri(const char *uri); + +/* init / cleanup */ +void gtkwgaim_init(HINSTANCE); +void gtkwgaim_cleanup(void); + +#endif /* _WIN32DEP_H_ */ + Property changes on: trunk/gtk/win32/gtkwin32dep.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Deleted: trunk/gtk/win32/libc_interface.c =================================================================== --- trunk/gtk/win32/libc_interface.c 2006-08-20 16:45:57 UTC (rev 16904) +++ trunk/gtk/win32/libc_interface.c 2006-08-20 16:49:37 UTC (rev 16905) @@ -1,990 +0,0 @@ -/* - * gaim - * - * Copyright (C) 2002-2003, Herman Bloggs <her...@ya...> - * - * 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 <winsock2.h> -#include <ws2tcpip.h> -#include <io.h> -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#include <sys/timeb.h> -#include <sys/stat.h> -#include <time.h> -#include <glib.h> -#include "debug.h" -#include "libc_internal.h" -#if GLIB_CHECK_VERSION(2,6,0) -# include <glib/gstdio.h> -#else -#define g_remove remove -#define g_rename rename -#define g_stat stat -#endif - -static char errbuf[1024]; - -/* helpers */ -static int wgaim_is_socket( int fd ) { - int optval; - unsigned int optlen = sizeof(int); - - if( (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void*)&optval, &optlen)) == SOCKET_ERROR ) { - int error = WSAGetLastError(); - if( error == WSAENOTSOCK ) - return FALSE; - else { - gaim_debug(GAIM_DEBUG_WARNING, "wgaim", "wgaim_is_socket: getsockopt returned error: %d\n", error); - return FALSE; - } - } - return TRUE; -} - -/* socket.h */ -int wgaim_socket (int namespace, int style, int protocol) { - int ret; - - ret = socket( namespace, style, protocol ); - - if( ret == INVALID_SOCKET ) { - errno = WSAGetLastError(); - return -1; - } - return ret; -} - -int wgaim_connect(int socket, struct sockaddr *addr, u_long length) { - int ret; - - ret = connect( socket, addr, length ); - - if( ret == SOCKET_ERROR ) { - errno = WSAGetLastError(); - if( errno == WSAEWOULDBLOCK ) - errno = WSAEINPROGRESS; - return -1; - } - return 0; -} - -int wgaim_getsockopt(int socket, int level, int optname, void *optval, socklen_t *optlenptr) { - if(getsockopt(socket, level, optname, optval, optlenptr) == SOCKET_ERROR ) { - errno = WSAGetLastError(); - return -1; - } - return 0; -} - -int wgaim_setsockopt(int socket, int level, int optname, const void *optval, socklen_t optlen) { - if(setsockopt(socket, level, optname, optval, optlen) == SOCKET_ERROR ) { - errno = WSAGetLastError(); - return -1; - } - return 0; -} - -int wgaim_getsockname(int socket, struct sockaddr *addr, socklen_t *lenptr) { - if(getsockname(socket, addr, lenptr) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } - return 0; -} - -int wgaim_bind(int socket, struct sockaddr *addr, socklen_t length) { - if(bind(socket, addr, length) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } - return 0; -} - -int wgaim_listen(int socket, unsigned int n) { - if(listen(socket, n) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } - return 0; -} - -int wgaim_sendto(int socket, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) { - int ret; - if ((ret = sendto(socket, buf, len, flags, to, tolen) - ) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } - return ret; -} - -/* fcntl.h */ -/* This is not a full implementation of fcntl. Update as needed.. */ -int wgaim_fcntl(int socket, int command, int val) { - switch( command ) { - case F_SETFL: - { - int ret=0; - - switch( val ) { - case O_NONBLOCK: - { - u_long imode=1; - ret = ioctlsocket(socket, FIONBIO, &imode); - break; - } - case 0: - { - u_long imode=0; - ret = ioctlsocket(socket, FIONBIO, &imode); - break; - } - default: - errno = EINVAL; - return -1; - }/*end switch*/ - if( ret == SOCKET_ERROR ) { - errno = WSAGetLastError(); - return -1; - } - return 0; - } - default: - gaim_debug(GAIM_DEBUG_WARNING, "wgaim", "wgaim_fcntl: Unsupported command\n"); - return -1; - }/*end switch*/ -} - -/* sys/ioctl.h */ -int wgaim_ioctl(int fd, int command, void* val) { - switch( command ) { - case FIONBIO: - { - if (ioctlsocket(fd, FIONBIO, (unsigned long *)val) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } - return 0; - } - case SIOCGIFCONF: - { - INTERFACE_INFO InterfaceList[20]; - unsigned long nBytesReturned; - if (WSAIoctl(fd, SIO_GET_INTERFACE_LIST, - 0, 0, &InterfaceList, - sizeof(InterfaceList), &nBytesReturned, - 0, 0) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } else { - int i; - struct ifconf *ifc = val; - char *tmp = ifc->ifc_buf; - int nNumInterfaces = - nBytesReturned / sizeof(INTERFACE_INFO); - for (i = 0; i < nNumInterfaces; i++) { - INTERFACE_INFO ii = InterfaceList[i]; - struct ifreq *ifr = (struct ifreq *) tmp; - struct sockaddr_in *sa = (struct sockaddr_in *) &ifr->ifr_addr; - - sa->sin_family = ii.iiAddress.AddressIn.sin_family; - sa->sin_port = ii.iiAddress.AddressIn.sin_port; - sa->sin_addr.s_addr = ii.iiAddress.AddressIn.sin_addr.s_addr; - tmp += sizeof(struct ifreq); - - /* Make sure that we can fit in the original buffer */ - if (tmp >= (ifc->ifc_buf + ifc->ifc_len + sizeof(struct ifreq))) { - break; - } - } - /* Replace the length with the actually used length */ - ifc->ifc_len = ifc->ifc_len - (ifc->ifc_buf - tmp); - return 0; - } - } - default: - errno = EINVAL; - return -1; - }/*end switch*/ -} - -/* arpa/inet.h */ -int wgaim_inet_aton(const char *name, struct in_addr *addr) { - if((addr->s_addr = inet_addr(name)) == INADDR_NONE) - return 0; - else - return 1; -} - -/* netdb.h */ -struct hostent* wgaim_gethostbyname(const char *name) { - struct hostent *hp; - - if((hp = gethostbyname(name)) == NULL) { - errno = WSAGetLastError(); - return NULL; - } - return hp; -} - -/* string.h */ -char* wgaim_strerror( int errornum ) { - if( errornum > WSABASEERR ) { - sprintf( errbuf, "Windows socket error #%d", errornum ); - return errbuf; - } - else - return strerror( errornum ); -} - -/* unistd.h */ - -/* - * We need to figure out whether fd is a file or socket handle. - */ -int wgaim_read(int fd, void *buf, unsigned int size) { - int ret; - - if(wgaim_is_socket(fd)) { - if((ret = recv(fd, buf, size, 0)) == SOCKET_ERROR) { - errno = WSAGetLastError(); - if(errno == WSAEWOULDBLOCK) - errno = EAGAIN; - return -1; - } -#if 0 - else if( ret == 0 ) { - /* connection has been gracefully closed */ - errno = WSAENOTCONN; - return -1; - } -#endif - else { - /* success reading socket */ - return ret; - } - } else { - /* fd is not a socket handle.. pass it off to read */ - return read(fd, buf, size); - } -} - -int wgaim_send(int fd, const void *buf, unsigned int size, int flags) { - int ret; - - ret = send(fd, buf, size, flags); - - if (ret == SOCKET_ERROR) { - errno = WSAGetLastError(); - if(errno == WSAEWOULDBLOCK) - errno = EAGAIN; - return -1; - } - return ret; -} - -int wgaim_write(int fd, const void *buf, unsigned int size) { - - if(wgaim_is_socket(fd)) - return wgaim_send(fd, buf, size, 0); - else - return write(fd, buf, size); -} - -int wgaim_recv(int fd, void *buf, size_t len, int flags) { - int ret; - - if((ret = recv(fd, buf, len, flags)) == SOCKET_ERROR) { - errno = WSAGetLastError(); - if(errno == WSAEWOULDBLOCK) - errno = EAGAIN; - return -1; - } else { - return ret; - } -} - -int wgaim_close(int fd) { - int ret; - - if( wgaim_is_socket(fd) ) { - if( (ret = closesocket(fd)) == SOCKET_ERROR ) { - errno = WSAGetLastError(); - return -1; - } - else - return 0; - } - else - return close(fd); -} - -int wgaim_gethostname(char *name, size_t size) { - if(gethostname(name, size) == SOCKET_ERROR) { - errno = WSAGetLastError(); - return -1; - } - return 0; -} - -/* sys/time.h */ - -int wgaim_gettimeofday(struct timeval *p, struct timezone *z) { - int res = 0; - struct _timeb timebuffer; - - if (z != 0) { - _tzset(); - z->tz_minuteswest = _timezone/60; - z->tz_dsttime = _daylight; - } - - if (p != 0) { - _ftime(&timebuffer); - p->tv_sec = timebuffer.time; /* seconds since 1-1-1970 */ - p->tv_usec = timebuffer.millitm*1000; /* microseconds */ - } - - return res; -} - -/* stdio.h */ - -int wgaim_rename (const char *oldname, const char *newname) { - struct stat oldstat, newstat; - - if(g_stat(oldname, &oldstat) == 0) { - /* newname exists */ - if(g_stat(newname, &newstat) == 0) { - /* oldname is a dir */ - if(_S_ISDIR(oldstat.st_mode)) { - if(!_S_ISDIR(newstat.st_mode)) { - return g_rename(oldname, newname); - } - /* newname is a dir */ - else { - /* This is not quite right.. If newname is empty and - is not a sub dir of oldname, newname should be - deleted and oldname should be renamed. - */ - gaim_debug(GAIM_DEBUG_WARNING, "wgaim", "wgaim_rename does not behave here as it should\n"); - return g_rename(oldname, newname); - } - } - /* oldname is not a dir */ - else { - /* newname is a dir */ - if(_S_ISDIR(newstat.st_mode)) { - errno = EISDIR; - return -1; - } - /* newname is not a dir */ - else { - g_remove(newname); - return g_rename(oldname, newname); - } - } - } - /* newname doesn't exist */ - else - return g_rename(oldname, newname); - } - else { - /* oldname doesn't exist */ - errno = ENOENT; - return -1; - } - -} - -/* time.h */ - -struct tm * wgaim_localtime_r (const time_t *time, struct tm *resultp) { - struct tm* tmptm; - - if(!time) - return NULL; - tmptm = localtime(time); - if(resultp && tmptm) - return memcpy(resultp, tmptm, sizeof(struct tm)); - else - return NULL; -} - -/* - * Used by gaim_utf8_strftime() by way of gaim_internal_strftime() - * in src/util.c - * - * Code derived from PostgreSQL src/timezone/pgtz.c: - * http://developer.postgresql.org/cvsweb.cgi/pgsql/src/timezone/pgtz.c - */ - -/* -PostgreSQL Database Management System -(formerly known as Postgres, then as Postgres95) - -Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group - -Portions Copyright (c) 1994, The Regents of the University of California - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose, without fee, and without a written agreement -is hereby granted, provided that the above copyright notice and this -paragraph and the following two paragraphs appear in all copies. - -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING -LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS -DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -*/ -static struct -{ - char *wstd; /* Windows name of standard timezone */ - char *wdst; /* Windows name of daylight timezone */ - char *ustd; /* Unix name of standard timezone */ - char *udst; /* Unix name of daylight timezone */ -} win32_tzmap[] = -{ - { - "", "", - "", "", - }, - /* - * This list was built from the contents of the registry at - * "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" - * on Windows XP Professional SP1 - */ - { - "Afghanistan Standard Time", "Afghanistan Daylight Time", - "AFT", "AFT" - }, - { - "Alaskan Standard Time", "Alaskan Daylight Time", - "AKST", "AKDT" - }, - { - "Arab Standard Time", "Arab Daylight Time", - "AST", "AST" - }, - { - "Arabian Standard Time", "Arabian Daylight Time", - "GST", "GST" - }, - { - "Arabic Standard Time", "Arabic Daylight Time", - "AST", "ADT" - }, - { - "Atlantic Standard Time", "Atlantic Daylight Time", - "AST", "ADT" - }, - { - "AUS Central Standard Time", "AUS Central Daylight Time", - "CST", "CST" - }, - { - "AUS Eastern Standard Time", "AUS Eastern Daylight Time", - "EST", "EST" - }, - { - "Azores Standard Time", "Azores Daylight Time", - "AZOT", "AZOST" - }, - { - "Canada Central Standard Time", "Canada Central Daylight Time", - "CST", "MDT" - }, - { - "Cape Verde Standard Time", "Cape Verde Daylight Time", - "CVT", "CVST" - }, - { - "Caucasus Standard Time", "Caucasus Daylight Time", - "AZT", "AZST" - }, - { - "Cen. Australia Standard Time", "Cen. Australia Daylight Time", - "CST", "CST" - }, - { - "Central America Standard Time", "Central America Daylight Time", - "CST", "CDT" - }, - { - "Central Asia Standard Time", "Central Asia Daylight Time", - "BDT", "BDT" - }, - { - "Central Europe Standard Time", "Central Europe Daylight Time", - "CET", "CEST" - }, - { - "Central European Standard Time", "Central European Daylight Time", - "CET", "CEST" - }, - { - "Central Pacific Standard Time", "Central Pacific Daylight Time", - "NCT", "NCST" - }, - { - "Central Standard Time", "Central Daylight Time", - "CST", "CDT" - }, - { - "China Standard Time", "China Daylight Time", - "HKT", "HKST" - }, - { - "Dateline Standard Time", "Dateline Daylight Time", - "GMT+12", "GMT+12" - }, - { - "E. Africa Standard Time", "E. Africa Daylight Time", - "EAT", "EAT" - }, - { - "E. Australia Standard Time", "E. Australia Daylight Time", - "EST", "EST" - }, - { - "E. Europe Standard Time", "E. Europe Daylight Time", - "EET", "EEST" - }, - { - "E. South America Standard Time", "E. South America Daylight Time", - "BRT", "BRST" - }, - { - "Eastern Standard Time", "Eastern Daylight Time", - "EST", "EDT" - }, - { - "Egypt Standard Time", "Egypt Daylight Time", - "EET", "EEST" - }, - { - "Ekaterinburg Standard Time", "Ekaterinburg Daylight Time", - "YEKT", "YEKST" - }, - { - "Fiji Standard Time", "Fiji Daylight Time", - "FJT", "FJST" - }, - { - "FLE Standard Time", "FLE Daylight Time", - "EET", "EEST" - }, - { - "GMT Standard Time", "GMT Daylight Time", - "GMT", "IST" - }, - { - "Greenland Standard Time", "Greenland Daylight Time", - "WGT", "WGST" - }, - { - "Greenwich Standard Time", "Greenwich Daylight Time", - "WET", "WEST" - }, - { - "GTB Standard Time", "GTB Daylight Time", - "EET", "EEST" - }, - { - "Hawaiian Standard Time", "Hawaiian Daylight Time", - "HST", "HPT" - }, - { - "India Standard Time", "India Daylight Time", - "IST", "IST" - }, - { - "Iran Standard Time", "Iran Daylight Time", - "IRST", "IRDT" - }, - { - "Jerusalem Standard Time", "Jerusalem Daylight Time", - "IST", "IDT" - }, - { - "Korea Standard Time", "Korea Daylight Time", - "KST", "KDT" - }, - { - "Mexico Standard Time", "Mexico Daylight Time", - "CST", "CDT" - }, - { - "Mexico Standard Time", "Mexico Daylight Time", - "BOT", "BOST" - }, - { - "Mid-Atlantic Standard Time", "Mid-Atlantic Daylight Time", - "GST", "GST" - }, - { - "Mountain Standard Time", "Mountain Daylight Time", - "MST", "MDT" - }, - { - "Myanmar Standard Time", "Myanmar Daylight Time", - "MMT", "MMT" - }, - { - "N. Central Asia Standard Time", "N. Central Asia Daylight Time", - "ALMT", "ALMST" - }, - { - "Nepal Standard Time", "Nepal Daylight Time", - "NPT", "NPT" - }, - { - "New Zealand Standard Time", "New Zealand Daylight Time", - "NZST", "NZDT" - }, - { - "Newfoundland Standard Time", "Newfoundland Daylight Time", - "NST", "NDT" - }, - { - "North Asia East Standard Time", "North Asia East Daylight Time", - "IRKT", "IRKST" - }, - { - "North Asia Standard Time", "North Asia Daylight Time", - "KRAT", "KRAST" - }, - { - "Pacific SA Standard Time", "Pacific SA Daylight Time", - "CLT", "CLST" - }, - { - "Pacific Standard Time", "Pacific Daylight Time", - "PST", "PDT" - }, - { - "Romance Standard Time", "Romance Daylight Time", - "CET", "CEST" - }, - { - "Russian Standard Time", "Russian Daylight Time", - "MSK", "MSD" - }, - { - "SA Eastern Standard Time", "SA Eastern Daylight Time", - "ART", "ARST" - }, - { - "SA Pacific Standard Time", "SA Pacific Daylight Time", - "COT", "COST" - }, - { - "SA Western Standard Time", "SA Western Daylight Time", - "VET", "VET" - }, - { - "Samoa Standard Time", "Samoa Daylight Time", - "SST", "NDT" - }, - { - "SE Asia Standard Time", "SE Asia Daylight Time", - "ICT", "ICT" - }, - { - "Malay Peninsula Standard Time", "Malay Peninsula Daylight Time", - "MYT", "MALST" - }, - { - "South Africa Standard Time", "South Africa Daylight Time", - "CAT", "CAT" - }, - { - "Sri Lanka Standard Time", "Sri Lanka Daylight Time", - "LKT", "IST" - }, - { - "Taipei Standard Time", "Taipei Daylight Time", - "CST", "CDT" - }, - { - "Tasmania Standard Time", "Tasmania Daylight Time", - "EST", "EST" - }, - { - "Tokyo Standard Time", "Tokyo Daylight Time", - "JST", "JDT" - }, - { - "Tonga Standard Time", "Tonga Daylight Time", - "TOT", "TOST" - }, - { - "US Eastern Standard Time", "US Eastern Daylight Time", - "EST", "EDT" - }, - { - "US Mountain Standard Time", "US Mountain Daylight Time", - "MST", "MDT" - }, - { - "Vladivostok Standard Time", "Vladivostok Daylight Time", - "VLAT", "VLAST" - }, - { - "W. Australia Standard Time", "W. Australia Daylight Time", - "WST", "WST" - }, - - /* Not mapped in PostgreSQL. - * - * I mapped this based on the following information... -- rlaager - * $ cd /usr/share/zoneinfo/Africa - * $ for i in * ; do echo `TZ=Africa/$i date +"%z %Z"` $i ; done | grep +0100 - * +0100 CET Algiers - * +0100 WAT Bangui - * +0100 WAT Brazzaville - * +0100 CET Ceuta - * +0100 WAT Douala - * +0100 WAT Kinshasa - * +0100 WAT Lagos - * +0100 WAT Libreville - * +0100 WAT Luanda - * +0100 WAT Malabo - * +0100 WAT Ndjamena - * +0100 WAT Niamey - * +0100 WAT Porto-Novo - * +0100 CET Tunis - **/ - { - "W. Central Africa Standard Time", "W. Central Africa Daylight Time", - "WAT", "WAT" - }, - - { - "W. Europe Standard Time", "W. Europe Daylight Time", - "CET", "CEST" - }, - { - "West Asia Standard Time", "West Asia Daylight Time", - "PKT", "PKST" - }, - { - "West Pacific Standard Time", "West Pacific Daylight Time", - "ChST", "ChST" - }, - { - "Yakutsk Standard Time", "Yakutsk Daylight Time", - "YAKT", "YAKST" - }, - { - NULL, NULL, - NULL, NULL - } -}; - -const char * -wgaim_get_timezone_abbreviation(const struct tm *tm) -{ - int i; - char tzname[128]; - char localtzname[256]; - HKEY rootKey; - int idx; - - if (!tm) - { - gaim_debug_warning("wgaim", "could not determine current date/time: localtime failed\n"); - return ""; - } - - if (strftime(tzname, sizeof(tzname) - 1, "%Z", tm) == 0) - { - gaim_debug_error("wgaim", "timezone name is too long for the buffer\n"); - return ""; - } - - for (i = 0; win32_tzmap[i].wstd != NULL; i++) - { - if (strcmp(tzname, win32_tzmap[i].wstd) == 0) - { -#if 0 - gaim_debug_info("wgaim", "TZ \"%s\" matches Windows timezone \"%s\"\n", - win32_tzmap[i].ustd, tzname); -#endif - /* Cache the Result */ - if (i > 0) { - if (win32_tzmap[0].wstd[0] != '\0') - g_free(win32_tzmap[0].wstd); - win32_tzmap[0].wstd = g_strdup(tzname); - win32_tzmap[0].ustd = win32_tzmap[i].ustd; - } - - return win32_tzmap[i].ustd; - } - if (strcmp(tzname, win32_tzmap[i].wdst) == 0) - { -#if 0 - gaim_debug_info("wgaim", "TZ \"%s\" matches Windows timezone \"%s\"\n", - win32_tzmap[i].udst, tzname); -#endif - /* Cache the Result */ - if (i > 0) { - if (win32_tzmap[0].wdst[0] != '\0') - g_free(win32_tzmap[0].wdst); - win32_tzmap[0].wdst = g_strdup(tzname); - win32_tzmap[0].udst = win32_tzmap[i].udst; - } - - return win32_tzmap[i].udst; - } - } - - /* - * Localized Windows versions return localized names for the timezone. - * Scan the registry to find the English name, and then try matching - * against our table again. - */ - memset(localtzname, 0, sizeof(localtzname)); - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones", - 0, - KEY_READ, - &rootKey) != ERROR_SUCCESS) - { - gaim_debug_warning("wgaim", "could not open registry key to identify Windows timezone: %i\n", (int) GetLastError()); - return ""; - } - - for (idx = 0;; idx++) - { - char keyname[256]; - char zonename[256]; - DWORD namesize; - FILETIME lastwrite; - HKEY key; - LONG r; - - memset(keyname, 0, sizeof(keyname)); - namesize = sizeof(keyname); - if ((r = RegEnumKeyEx(rootKey, - idx, - keyname, - &namesize, - NULL, - NULL, - NULL, - &lastwrite)) != ERROR_SUCCESS) - { - if (r == ERROR_NO_MORE_ITEMS) - break; - gaim_debug_warning("wgaim", "could not enumerate registry subkeys to identify Windows timezone: %i\n", (int) r); - break; - } - - if ((r = RegOpenKeyEx(rootKey, keyname, 0, KEY_READ, &key)) != ERROR_SUCCESS) - { - gaim_debug_warning("wgaim", "could not open registry subkey to identify Windows timezone: %i\n", (int) r); - break; - } - - memset(zonename, 0, sizeof(zonename)); - namesize = sizeof(zonename); - if ((r = RegQueryValueEx(key, "Std", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS) - { - gaim_debug_warning("wgaim", "could not query value for 'std' to identify Windows timezone: %i\n", (int) r); - RegCloseKey(key); - break; - } - if (strcmp(tzname, zonename) == 0) - { - /* Matched zone */ - strcpy(localtzname, keyname); - RegCloseKey(key); - break; - } - memset(zonename, 0, sizeof(zonename)); - namesize = sizeof(zonename); - if ((r = RegQueryValueEx(key, "Dlt", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS) - { - gaim_debug_warning("wgaim", "could not query value for 'dlt' to identify Windows timezone: %i\n", (int) r); - RegCloseKey(key); - break; - } - if (strcmp(tzname, zonename) == 0) - { - /* Matched DST zone */ - strcpy(localtzname, keyname); - RegCloseKey(key); - break; - } - - RegCloseKey(key); - } - - RegCloseKey(rootKey); - - if (localtzname[0]) - { - /* Found a localized name, so scan for that one too */ - for (i = 0; win32_tzmap[i].wstd != NULL; i++) - { - if (strcmp(localtzname, win32_tzmap[i].wstd) == 0) - { -#if 0 - gaim_debug_info("wgaim", "TZ \"%s\" matches localized Windows timezone \"%s\" (\"%s\")\n", - win32_tzmap[i].ustd, tzname, localtznam... [truncated message content] |
From: <sa...@us...> - 2006-08-21 03:13:23
|
Revision: 16936 Author: sadrul Date: 2006-08-20 20:13:08 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16936&view=rev Log Message: ----------- Cleaning up after myself: free data *after* using it. And if gstreamer fails, and the user switches to a different method, sound should stil work. Modified Paths: -------------- trunk/gtk/gtksound.c trunk/gtk/gtkstatusbox.c Modified: trunk/gtk/gtksound.c =================================================================== --- trunk/gtk/gtksound.c 2006-08-21 03:04:12 UTC (rev 16935) +++ trunk/gtk/gtksound.c 2006-08-21 03:13:08 UTC (rev 16936) @@ -314,7 +314,6 @@ g_error_free(error); error = NULL; } - return; } #endif /* USE_GSTREAMER */ Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-08-21 03:04:12 UTC (rev 16935) +++ trunk/gtk/gtkstatusbox.c 2006-08-21 03:13:08 UTC (rev 16936) @@ -1055,9 +1055,9 @@ if (prplinfo && prplinfo->icon_spec.format) { char *icon = gaim_gtk_convert_buddy_icon(plug, filename); gaim_account_set_buddy_icon(box->account, icon); - g_free(icon); gaim_account_set_ui_bool(box->account, GAIM_GTK_UI, "use-global-buddyicon", FALSE); gaim_account_set_ui_string(box->account, GAIM_GTK_UI, "non-global-buddyicon", icon); + g_free(icon); } } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-21 05:07:47
|
Revision: 16943 Author: thekingant Date: 2006-08-20 22:07:42 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16943&view=rev Log Message: ----------- Get rid of this thread stuff. You can read the whole saga at http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=201791 Basically we were working around some complicated library interactions between d-bus and newer, threaded versions of gnome-vfs. But the d-bus guys were awesome enough to make our working around unnecessary I'm seeing the following error printed to the console when I click on on the Send To menu in conversation windows, but I get this error with or without these threading changes. I'm not sure what's up with that. I should point out that our dnsquery.c stuff is calling g_thread_init() for both Unix and Windows now (it didn't used to do that on Unix) The error is: GLib-GObject: gsignal.c:1713: handler `982' of instance `0xc6d960' is not blocked Modified Paths: -------------- trunk/gtk/gtkmain.c trunk/libgaim/dbus-server.c Modified: trunk/gtk/gtkmain.c =================================================================== --- trunk/gtk/gtkmain.c 2006-08-21 04:54:11 UTC (rev 16942) +++ trunk/gtk/gtkmain.c 2006-08-21 05:07:42 UTC (rev 16943) @@ -640,18 +640,6 @@ 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); -#ifndef _WIN32 - gdk_threads_init(); -#endif -#endif /* Glib has threads */ - gui_check = gtk_init_check(&argc, &argv); if (!gui_check) { char *display = gdk_get_display(); Modified: trunk/libgaim/dbus-server.c =================================================================== --- trunk/libgaim/dbus-server.c 2006-08-21 04:54:11 UTC (rev 16942) +++ trunk/libgaim/dbus-server.c 2006-08-21 05:07:42 UTC (rev 16943) @@ -757,9 +757,6 @@ void gaim_dbus_init(void) { - if (g_thread_supported()) - dbus_g_thread_init(); - gaim_dbus_init_ids(); g_free(init_error); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-08-21 17:04:38
|
Revision: 16953 Author: rlaager Date: 2006-08-21 10:04:26 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16953&view=rev Log Message: ----------- SF Patch #1544073 from Alex Badea "Here's a few fixes to allow building from outside the source tree again." Modified Paths: -------------- trunk/console/Makefile.am trunk/gtk/Makefile.am Modified: trunk/console/Makefile.am =================================================================== --- trunk/console/Makefile.am 2006-08-21 16:16:10 UTC (rev 16952) +++ trunk/console/Makefile.am 2006-08-21 17:04:26 UTC (rev 16953) @@ -46,7 +46,7 @@ $(LIBXML_LIBS) \ $(GNT_LIBS) \ -L./libgnt/ -lgnt \ - -L$(top_srcdir)/libgaim -lgaim + -L$(top_builddir)/libgaim -lgaim AM_CPPFLAGS = \ -DSTANDALONE \ @@ -56,7 +56,8 @@ -DLOCALEDIR=\"$(datadir)/locale\" \ -DSYSCONFDIR=\"$(sysconfdir)\" \ -I$(top_srcdir)/libgaim/ \ - -I ./libgnt/ \ + -I$(top_srcdir) \ + -I$(srcdir)/libgnt/ \ $(DEBUG_CFLAGS) \ $(GLIB_CFLAGS) \ $(DBUS_CFLAGS) \ Modified: trunk/gtk/Makefile.am =================================================================== --- trunk/gtk/Makefile.am 2006-08-21 16:16:10 UTC (rev 16952) +++ trunk/gtk/Makefile.am 2006-08-21 17:04:26 UTC (rev 16953) @@ -164,7 +164,7 @@ $(LIBXML_LIBS) \ $(GTK_LIBS) \ $(CAP_LIBS) \ - -L$(top_srcdir)/libgaim -lgaim + -L$(top_builddir)/libgaim -lgaim AM_CPPFLAGS = \ -DBR_PTHREADS=0 \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fac...@us...> - 2006-08-22 20:07:27
|
Revision: 16987 Author: faceprint Date: 2006-08-22 13:07:16 -0700 (Tue, 22 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16987&view=rev Log Message: ----------- I didn't like this in the buddy list, but the plugins dialog needed it Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkplugin.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-08-22 19:43:30 UTC (rev 16986) +++ trunk/gtk/gtkblist.c 2006-08-22 20:07:16 UTC (rev 16987) @@ -3939,7 +3939,6 @@ G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER); gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel)); - gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(gtkblist->treeview), TRUE); gtk_widget_show(gtkblist->treeview); gtk_widget_set_name(gtkblist->treeview, "gaim_gtkblist_treeview"); Modified: trunk/gtk/gtkplugin.c =================================================================== --- trunk/gtk/gtkplugin.c 2006-08-22 19:43:30 UTC (rev 16986) +++ trunk/gtk/gtkplugin.c 2006-08-22 20:07:16 UTC (rev 16987) @@ -560,6 +560,8 @@ event_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls)); + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(event_view), TRUE); + g_signal_connect(G_OBJECT(event_view), "row-activated", G_CALLBACK(show_plugin_prefs_cb), plugin_dialog); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2006-08-23 04:29:33
|
Revision: 16994 Author: marv_sf Date: 2006-08-22 21:29:16 -0700 (Tue, 22 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16994&view=rev Log Message: ----------- If an emblem is really big, scale it down to something sane. Use a really big emblem (the msn prpl icon) in yahoo. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/libgaim/protocols/yahoo/yahoo.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-08-23 04:22:04 UTC (rev 16993) +++ trunk/gtk/gtkblist.c 2006-08-23 04:29:16 UTC (rev 16994) @@ -3014,19 +3014,27 @@ g_free(filename); if(emblem) { if(i == 0 && size == GAIM_STATUS_ICON_SMALL) { + double scale_factor = 0.6; + if(gdk_pixbuf_get_width(emblem) > 20) + scale_factor = 9.0 / gdk_pixbuf_get_width(emblem); + gdk_pixbuf_composite(emblem, scale, 5, 5, 10, 10, 5, 5, - .6, .6, + scale_factor, scale_factor, GDK_INTERP_BILINEAR, 255); } else { + double scale_factor = 1.0; + if(gdk_pixbuf_get_width(emblem) > 20) + scale_factor = 15.0 / gdk_pixbuf_get_width(emblem); + gdk_pixbuf_composite(emblem, scale, emblems[i].x, emblems[i].y, 15, 15, emblems[i].x, emblems[i].y, - 1, 1, + scale_factor, scale_factor, GDK_INTERP_BILINEAR, 255); } Modified: trunk/libgaim/protocols/yahoo/yahoo.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo.c 2006-08-23 04:22:04 UTC (rev 16993) +++ trunk/libgaim/protocols/yahoo/yahoo.c 2006-08-23 04:29:16 UTC (rev 16994) @@ -300,7 +300,8 @@ if (strtol(pair->value, NULL, 10) == 0) { if (f) f->status = YAHOO_STATUS_OFFLINE; - gaim_prpl_got_user_status(account, name, "offline", NULL); + if (name) + gaim_prpl_got_user_status(account, name, "offline", NULL); break; } break; @@ -2786,6 +2787,8 @@ emblems[i++] = "wireless"; if (yahoo_friend_get_game(f)) emblems[i++] = "game"; + if (f->protocol == 2) + emblems[i] = "msn"; } *se = emblems[0]; *sw = emblems[1]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fac...@us...> - 2006-08-25 16:42:57
|
Revision: 17029 Author: faceprint Date: 2006-08-25 09:42:38 -0700 (Fri, 25 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17029&view=rev Log Message: ----------- add font-weight support to gtkimhtml use it in our outgoing text closes sf 1083365 Modified Paths: -------------- trunk/gtk/gtkimhtml.c trunk/gtk/gtkimhtml.h trunk/libgaim/util.c Modified: trunk/gtk/gtkimhtml.c =================================================================== --- trunk/gtk/gtkimhtml.c 2006-08-25 07:02:17 UTC (rev 17028) +++ trunk/gtk/gtkimhtml.c 2006-08-25 16:42:38 UTC (rev 17029) @@ -2773,15 +2773,15 @@ * font-family * font-size * text-decoration: underline + * font-weight: bold * * TODO: * background-color * font-style - * font-weight */ { gchar *style, *color, *background, *family, *size; - gchar *textdec; + gchar *textdec, *weight; GtkIMHtmlFontDetail *font, *oldfont = NULL; style = gtk_imhtml_get_html_opt (tag, "style="); @@ -2793,8 +2793,9 @@ "font-family:"); size = gtk_imhtml_get_css_opt (style, "font-size:"); textdec = gtk_imhtml_get_css_opt (style, "text-decoration:"); + weight = gtk_imhtml_get_css_opt (style, "font-weight:"); - if (!(color || family || size || background || textdec)) { + if (!(color || family || size || background || textdec || weight)) { g_free(style); break; } @@ -2879,6 +2880,34 @@ font->underline = 1; } + if (oldfont) + { + font->bold = oldfont->bold; + } + if (weight) + { + if(!g_ascii_strcasecmp(weight, "normal")) { + font->bold = 0; + } else if(!g_ascii_strcasecmp(weight, "bold")) { + font->bold = 1; + } else if(!g_ascii_strcasecmp(weight, "bolder")) { + font->bold++; + } else if(!g_ascii_strcasecmp(weight, "lighter")) { + if(font->bold > 0) + font->bold--; + } else { + int num = atoi(weight); + if(num >= 700) + font->bold = 1; + else + font->bold = 0; + } + if((font->bold && !oldfont->bold) || (oldfont->bold && !font->bold)) + { + gtk_imhtml_toggle_bold(imhtml); + } + } + g_free(style); g_free(size); fonts = g_slist_prepend (fonts, font); @@ -2900,6 +2929,8 @@ gtk_imhtml_font_set_size(imhtml, 3); if (font->underline) gtk_imhtml_toggle_underline(imhtml); + if (font->bold) + gtk_imhtml_toggle_bold(imhtml); gtk_imhtml_toggle_fontface(imhtml, NULL); gtk_imhtml_toggle_forecolor(imhtml, NULL); gtk_imhtml_toggle_backcolor(imhtml, NULL); @@ -2913,6 +2944,9 @@ if (font->underline != oldfont->underline) gtk_imhtml_toggle_underline(imhtml); + if ((font->bold && !oldfont->bold) || (oldfont->bold && !font->bold)) + gtk_imhtml_toggle_bold(imhtml); + if (font->face && (!oldfont->face || strcmp(font->face, oldfont->face) != 0)) gtk_imhtml_toggle_fontface(imhtml, oldfont->face); Modified: trunk/gtk/gtkimhtml.h =================================================================== --- trunk/gtk/gtkimhtml.h 2006-08-25 07:02:17 UTC (rev 17028) +++ trunk/gtk/gtkimhtml.h 2006-08-25 16:42:38 UTC (rev 17029) @@ -145,6 +145,7 @@ gchar *bg; gchar *sml; gboolean underline; + gshort bold; }; struct _GtkSmileyTree { Modified: trunk/libgaim/util.c =================================================================== --- trunk/libgaim/util.c 2006-08-25 07:02:17 UTC (rev 17028) +++ trunk/libgaim/util.c 2006-08-25 16:42:38 UTC (rev 17029) @@ -1271,9 +1271,7 @@ } } else { /* opening tag */ ALLOW_TAG("a"); - ALLOW_TAG_ALT("b", "strong"); ALLOW_TAG("blockquote"); - ALLOW_TAG_ALT("bold", "strong"); ALLOW_TAG("cite"); ALLOW_TAG("div"); ALLOW_TAG("em"); @@ -1312,6 +1310,15 @@ plain = g_string_append_c(plain, '\n'); continue; } + if(!g_ascii_strncasecmp(c, "<b>", 3) || !g_ascii_strncasecmp(c, "<bold>", strlen("<bold>"))) { + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); + pt->src_tag = *(c+2) == '>' ? "b" : "bold"; + pt->dest_tag = "span"; + tags = g_list_prepend(tags, pt); + c = strchr(c, '>') + 1; + xhtml = g_string_append(xhtml, "<span style='font-weight: bold;'>"); + continue; + } if(!g_ascii_strncasecmp(c, "<u>", 3) || !g_ascii_strncasecmp(c, "<underline>", strlen("<underline>"))) { struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); pt->src_tag = *(c+2) == '>' ? "u" : "underline"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-08-26 06:25:58
|
Revision: 17035 Author: rlaager Date: 2006-08-25 23:25:49 -0700 (Fri, 25 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17035&view=rev Log Message: ----------- Fixes SF Bug # 1373116 (and related Debian Bug #341607) Fix the Find functionality in the log viewer. It now properly scrolls to the first occurrence of the search term. Also, clicking the Find button will now jump to the next occurrence of the search term, including wrapping around to the top. Possible Badness: This changes the behavior of all IMHTML searches. Previously, if you kept calling gtk_imhtml_search_find(), it'd clear the highlighting when you went past the last occurrence of the search term. This seems wrong. I believe it should either stop or wrap around to the top. Wrapping around seemed most useful to me, so that's what I implemented. This was inspired by SF Patch #1545488 by Mark Schneider Modified Paths: -------------- trunk/doc/ChangeLog.API trunk/gtk/gtkimhtml.c trunk/gtk/gtklog.c Modified: trunk/doc/ChangeLog.API =================================================================== --- trunk/doc/ChangeLog.API 2006-08-26 03:25:00 UTC (rev 17034) +++ trunk/doc/ChangeLog.API 2006-08-26 06:25:49 UTC (rev 17035) @@ -125,6 +125,8 @@ * gaim_gtk_create_imhtml(): Added sw_ret() parameter * gaim_account_get_log(): Added create parameter * GAIM_CMD_P_VERYHIGH is now GAIM_CMD_P_VERY_HIGH + * gtk_imhtml_search_find(): Now wraps around to the top instead of + clearing the search at the end. Removed: * gaim_gtk_sound_{get,set}_mute() (replaced by the /gaim/gtk/sound/mute Modified: trunk/gtk/gtkimhtml.c =================================================================== --- trunk/gtk/gtkimhtml.c 2006-08-26 03:25:00 UTC (rev 17034) +++ trunk/gtk/gtkimhtml.c 2006-08-26 06:25:49 UTC (rev 17035) @@ -3542,12 +3542,13 @@ imhtml->search_string = g_strdup(text); if (gtk_source_iter_forward_search(&iter, imhtml->search_string, - GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE, - &start, &end, NULL)) { - + GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE, + &start, &end, NULL)) + { gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &start, 0, TRUE, 0, 0); gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &end, FALSE); - if (new_search) { + if (new_search) + { gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "search", &iter, &end); do gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "search", &start, &end); @@ -3558,9 +3559,23 @@ } return TRUE; } + else if (!new_search) + { + /* We hit the end, so start at the beginning again. */ + gtk_text_buffer_get_start_iter(imhtml->text_buffer, &iter); - gtk_imhtml_search_clear(imhtml); + if (gtk_source_iter_forward_search(&iter, imhtml->search_string, + GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_CASE_INSENSITIVE, + &start, &end, NULL)) + { + gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(imhtml), &start, 0, TRUE, 0, 0); + gtk_text_buffer_create_mark(imhtml->text_buffer, "search", &end, FALSE); + return TRUE; + } + + } + return FALSE; } Modified: trunk/gtk/gtklog.c =================================================================== --- trunk/gtk/gtklog.c 2006-08-26 03:25:00 UTC (rev 17034) +++ trunk/gtk/gtklog.c 2006-08-26 06:25:49 UTC (rev 17035) @@ -111,23 +111,32 @@ const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); GList *logs; - g_free(lv->search); - - gtk_tree_store_clear(lv->treestore); if (!(*search_term)) { /* reset the tree */ + gtk_tree_store_clear(lv->treestore); populate_log_tree(lv); + g_free(lv->search); lv->search = NULL; gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); select_first_log(lv); return; } + if (lv->search != NULL && !strcmp(lv->search, search_term)) + { + /* Searching for the same term acts as "Find Next" */ + gtk_imhtml_search_find(GTK_IMHTML(lv->imhtml), lv->search); + return; + } + + gaim_gtk_set_cursor(lv->window, GDK_WATCH); + + g_free(lv->search); lv->search = g_strdup(search_term); + + gtk_tree_store_clear(lv->treestore); gtk_imhtml_clear(GTK_IMHTML(lv->imhtml)); - gaim_gtk_set_cursor(lv->window, GDK_WATCH); - for (logs = lv->logs; logs != NULL; logs = logs->next) { char *read = gaim_log_read((GaimLog*)logs->data, NULL); if (read && *read && gaim_strcasestr(read, search_term)) { @@ -176,6 +185,13 @@ gtk_tree_view_expand_row(tv, path, FALSE); } +static gboolean search_find_cb(gpointer data) +{ + GaimGtkLogViewer *viewer = data; + gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); + return FALSE; +} + static void log_select_cb(GtkTreeSelection *sel, GaimGtkLogViewer *viewer) { GtkTreeIter iter; GValue val; @@ -230,7 +246,7 @@ if (viewer->search != NULL) { gtk_imhtml_search_clear(GTK_IMHTML(viewer->imhtml)); - gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); + g_idle_add(search_find_cb, viewer); } gaim_gtk_clear_cursor(viewer->window); @@ -291,7 +307,7 @@ GtkWidget *vbox; GtkWidget *frame; GtkWidget *hbox; - GtkWidget *button; + GtkWidget *find_button; GtkWidget *size_label; if (logs == NULL) @@ -417,10 +433,10 @@ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); lv->entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0); - button = gtk_button_new_from_stock(GTK_STOCK_FIND); - gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + find_button = gtk_button_new_from_stock(GTK_STOCK_FIND); + gtk_box_pack_start(GTK_BOX(hbox), find_button, FALSE, FALSE, 0); g_signal_connect(GTK_ENTRY(lv->entry), "activate", G_CALLBACK(search_cb), lv); - g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(search_cb), lv); + g_signal_connect(GTK_BUTTON(find_button), "clicked", G_CALLBACK(search_cb), lv); select_first_log(lv); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-08-26 06:26:15
|
Revision: 17036 Author: rlaager Date: 2006-08-25 23:26:09 -0700 (Fri, 25 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17036&view=rev Log Message: ----------- GaimGtkLogViewer is only used within gtklog.c, so let's hide it. Modified Paths: -------------- trunk/doc/ChangeLog.API trunk/gtk/gtklog.c trunk/gtk/gtklog.h Modified: trunk/doc/ChangeLog.API =================================================================== --- trunk/doc/ChangeLog.API 2006-08-26 06:25:49 UTC (rev 17035) +++ trunk/doc/ChangeLog.API 2006-08-26 06:26:09 UTC (rev 17036) @@ -189,6 +189,7 @@ * gaim_conversation_get_send_history(), and send_history from GaimConversation * Removed ui_ops from GaimBuddyList. Use gaim_blist_get_ui_ops() instead + * GaimGtkLogViewer hidden... You weren't using it anyway. Added: * gaim_prefs_disconnect_by_handle() Modified: trunk/gtk/gtklog.c =================================================================== --- trunk/gtk/gtklog.c 2006-08-26 06:25:49 UTC (rev 17035) +++ trunk/gtk/gtklog.c 2006-08-26 06:26:09 UTC (rev 17036) @@ -34,6 +34,25 @@ #include "notify.h" #include "util.h" +typedef struct _GaimGtkLogViewer GaimGtkLogViewer; + +/** + * A GTK+ Log Viewer. You can look at logs with it. + */ +struct _GaimGtkLogViewer { + GList *logs; /**< The list of logs viewed in this viewer */ + + GtkWidget *window; /**< The viewer's window */ + GtkTreeStore *treestore; /**< The treestore containing said logs */ + GtkWidget *treeview; /**< The treeview representing said treestore */ + GtkWidget *imhtml; /**< The imhtml to display said logs */ + GtkWidget *entry; /**< The search entry, in which search terms + * are entered */ + GaimLogReadFlags flags; /**< The most recently used log flags */ + char *search; /**< The string currently being searched for */ + GtkWidget *label; /**< The label at the top of the log viewer */ +}; + static GHashTable *log_viewers = NULL; static void populate_log_tree(GaimGtkLogViewer *lv); static GaimGtkLogViewer *syslog_viewer = NULL; Modified: trunk/gtk/gtklog.h =================================================================== --- trunk/gtk/gtklog.h 2006-08-26 06:25:49 UTC (rev 17035) +++ trunk/gtk/gtklog.h 2006-08-26 06:26:09 UTC (rev 17036) @@ -30,27 +30,6 @@ #include "account.h" -typedef struct _GaimGtkLogViewer GaimGtkLogViewer; - -/** - * A GTK+ Log Viewer. You can look at logs with it. - */ -struct _GaimGtkLogViewer { - GList *logs; /**< The list of logs viewed in this viewer */ - - GtkWidget *window; /**< The viewer's window */ - GtkTreeStore *treestore; /**< The treestore containing said logs */ - GtkWidget *treeview; /**< The treeview representing said treestore */ - GtkWidget *imhtml; /**< The imhtml to display said logs */ - GtkWidget *entry; /**< The search entry, in which search terms - * are entered */ - GaimLogReadFlags flags; /**< The most recently used log flags */ - char *search; /**< The string currently being searched for */ - GtkWidget *label; /**< The label at the top of the log viewer */ -}; - - - void gaim_gtk_log_show(GaimLogType type, const char *screenname, GaimAccount *account); void gaim_gtk_log_show_contact(GaimContact *contact); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-08-27 21:14:05
|
Revision: 17060 Author: thekingant Date: 2006-08-27 14:13:30 -0700 (Sun, 27 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=17060&view=rev Log Message: ----------- Make gaim_url_fetch() cancelable and change Yahoo! to take advantage of the changes. Other stuff can be changed later, the important thing is that the API is there. Modified Paths: -------------- trunk/doc/ChangeLog.API trunk/gtk/gtkprefs.c trunk/gtk/plugins/relnot.c trunk/libgaim/protocols/msn/msn.c trunk/libgaim/protocols/oscar/oscar.c trunk/libgaim/protocols/yahoo/yahoo.c trunk/libgaim/protocols/yahoo/yahoo.h trunk/libgaim/protocols/yahoo/yahoo_picture.c trunk/libgaim/protocols/yahoo/yahoo_profile.c trunk/libgaim/upnp.c trunk/libgaim/util.c trunk/libgaim/util.h Modified: trunk/doc/ChangeLog.API =================================================================== --- trunk/doc/ChangeLog.API 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/doc/ChangeLog.API 2006-08-27 21:13:30 UTC (rev 17060) @@ -122,6 +122,9 @@ * gaim_gethostbyname_async(): Renamed to gaim_dnsquery_a() and changed to return a pointer to a data structure that can be used to cancel the pending DNS query using gaim_dnsquery_destroy() + * gaim_url_fetch(): Renamed to gaim_util_fetch_url() and changed + to return a pointer to a data structer that can be used to cancel + the pending HTTP request using gaim_util_fetch_url_cancel(). * gaim_gtk_create_imhtml(): Added sw_ret() parameter * gaim_account_get_log(): Added create parameter * GAIM_CMD_P_VERYHIGH is now GAIM_CMD_P_VERY_HIGH @@ -283,7 +286,7 @@ * gaim_gtk_log_init() * gaim_gtk_log_get_handle() * gaim_gtk_log_uninit() - * gaim_url_fetch_request() + * gaim_util_fetch_url_request() * GaimMenuAction * gaim_menu_action_new() * gaim_menu_action_free() @@ -310,6 +313,8 @@ gaim_proxy_connect() request * gaim_dnsquery_destroy(): Can be used to cancel a pending DNS query. + * gaim_util_fetch_url_cancel(): Can be used to cancel a pending + call to gaim_util_fetch_url() or gaim_util_fetch_url_request(). Signals - Changed: (See the Doxygen docs for details on all signals.) * Signal propagation now stops after a handler returns a non-NULL value. Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/gtk/gtkprefs.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -526,26 +526,29 @@ } static void -theme_got_url(void *data, const char *themedata, size_t len) +theme_got_url(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *themedata, size_t len, const gchar *error_message) { FILE *f; gchar *path; - if (len == 0) + if ((error_message != NULL) || (len == 0)) return; f = gaim_mkstemp(&path, TRUE); fwrite(themedata, len, 1, f); fclose(f); - theme_install_theme(path, data); + theme_install_theme(path, user_data); g_unlink(path); g_free(path); } -static void theme_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, GtkSelectionData *sd, - guint info, guint t, gpointer data) { +static void +theme_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, + GtkSelectionData *sd, guint info, guint t, gpointer data) +{ gchar *name = (gchar *)sd->data; if ((sd->length >= 0) && (sd->format == 8)) { @@ -568,9 +571,9 @@ } else if (!g_ascii_strncasecmp(name, "http://", 7)) { /* Oo, a web drag and drop. This is where things * will start to get interesting */ - gaim_url_fetch(name, TRUE, NULL, FALSE, theme_got_url, ".tgz"); + gaim_util_fetch_url(name, TRUE, NULL, FALSE, theme_got_url, ".tgz"); } else if (!g_ascii_strncasecmp(name, "https://", 8)) { - /* gaim_url_fetch() doesn't support HTTPS, but we want users + /* gaim_util_fetch_url() doesn't support HTTPS, but we want users * to be able to drag and drop links from the SF trackers, so * we'll try it as an HTTP URL. */ char *tmp = g_strdup(name + 1); @@ -578,7 +581,7 @@ tmp[1] = 't'; tmp[2] = 't'; tmp[3] = 'p'; - gaim_url_fetch(tmp, TRUE, NULL, FALSE, theme_got_url, ".tgz"); + gaim_util_fetch_url(tmp, TRUE, NULL, FALSE, theme_got_url, ".tgz"); g_free(tmp); } Modified: trunk/gtk/plugins/relnot.c =================================================================== --- trunk/gtk/plugins/relnot.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/gtk/plugins/relnot.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -42,14 +42,14 @@ #define MIN_CHECK_INTERVAL 60 * 60 * 24 static void -version_fetch_cb(void *ud, const char *data, size_t len) +version_fetch_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *changelog, size_t len, const gchar *error_message) { - const char *changelog = data; char *cur_ver, *formatted; GString *message; int i=0; - if(!changelog || !len) + if(error_message || !changelog || !len) return; while(changelog[i] && changelog[i] != '\n') i++; @@ -101,7 +101,7 @@ "gaim" #endif ); - gaim_url_fetch(url, TRUE, NULL, FALSE, version_fetch_cb, NULL); + gaim_util_fetch_url(url, TRUE, NULL, FALSE, version_fetch_cb, NULL); gaim_prefs_set_int("/plugins/gtk/relnot/last_check", time(NULL)); g_free(url); } Modified: trunk/libgaim/protocols/msn/msn.c =================================================================== --- trunk/libgaim/protocols/msn/msn.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/protocols/msn/msn.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -1402,7 +1402,8 @@ return NULL; } -static void msn_got_photo(void *data, const char *url_text, size_t len); +static void msn_got_photo(GaimUtilFetchUrlData *url_data, gpointer data, + const gchar *url_text, size_t len, const gchar *error_message); #endif @@ -1424,7 +1425,8 @@ sect_info = TRUE; static void -msn_got_info(void *data, const char *url_text, size_t len) +msn_got_info(GaimUtilFetchUrlData *url_data, gpointer data, + const gchar *url_text, size_t len, const gchar *error_message) { MsnGetInfoData *info_data = (MsnGetInfoData *)data; char *stripped, *p, *q; @@ -1459,7 +1461,7 @@ tooltip_text = msn_tooltip_info_text(info_data); title = _("MSN Profile"); - if (url_text == NULL || strcmp(url_text, "") == 0) + if (error_message != NULL || url_text == NULL || strcmp(url_text, "") == 0) { g_snprintf(buf, 1024, "<html><body>%s<b>%s</b></body></html>", tooltip_text, _("Error retrieving profile")); @@ -1824,20 +1826,22 @@ /* Try to put the photo in there too, if there's one */ if (photo_url_text) { - gaim_url_fetch(photo_url_text, FALSE, NULL, FALSE, msn_got_photo, + gaim_util_fetch_url(photo_url_text, FALSE, NULL, FALSE, msn_got_photo, info2_data); } else { /* Emulate a callback */ - msn_got_photo(info2_data, NULL, 0); + /* TODO: Huh? */ + msn_got_photo(NULL, info2_data, NULL, 0, NULL); } } static void -msn_got_photo(void *data, const char *url_text, size_t len) +msn_got_photo(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *url_text, size_t len, const gchar *error_message) { - MsnGetInfoStepTwoData *info2_data = (MsnGetInfoStepTwoData *)data; + MsnGetInfoStepTwoData *info2_data = (MsnGetInfoStepTwoData *)user_data; int id = -1; /* Unmarshall the saved state */ @@ -1849,7 +1853,7 @@ char *tooltip_text = info2_data->tooltip_text; /* Make sure the connection is still valid if we got here by fetching a photo url */ - if (url_text && + if (error_message == NULL || url_text != NULL || g_list_find(gaim_connections_get_all(), info_data->gc) == NULL) { gaim_debug_warning("msn", "invalid connection. ignoring buddy photo info.\n"); @@ -1866,7 +1870,7 @@ } /* Try to put the photo in there too, if there's one and is readable */ - if (data && url_text && len != 0) + if (user_data && url_text && len != 0) { if (strstr(url_text, "400 Bad Request") || strstr(url_text, "403 Forbidden") @@ -1918,7 +1922,7 @@ url = g_strdup_printf("%s%s", PROFILE_URL, name); - gaim_url_fetch(url, FALSE, + gaim_util_fetch_url(url, FALSE, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", TRUE, msn_got_info, data); Modified: trunk/libgaim/protocols/oscar/oscar.c =================================================================== --- trunk/libgaim/protocols/oscar/oscar.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/protocols/oscar/oscar.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -1372,7 +1372,7 @@ return 1; } -/* XXX - Should use gaim_url_fetch for the below stuff */ +/* XXX - Should use gaim_util_fetch_url for the below stuff */ struct pieceofcrap { GaimConnection *gc; unsigned long offset; Modified: trunk/libgaim/protocols/yahoo/yahoo.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/protocols/yahoo/yahoo.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -52,7 +52,7 @@ /* #define YAHOO_DEBUG */ static void yahoo_add_buddy(GaimConnection *gc, GaimBuddy *, GaimGroup *); -static void yahoo_login_page_cb(void *user_data, const char *buf, size_t len); +static void yahoo_login_page_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, size_t len, const gchar *error_message); static void yahoo_set_status(GaimAccount *account, GaimStatus *status); static void @@ -1885,13 +1885,16 @@ break; case 13: if (!yd->wm) { + GaimUtilFetchUrlData *url_data; yd->wm = TRUE; if (yd->fd >= 0) close(yd->fd); if (gc->inpa) gaim_input_remove(gc->inpa); - gaim_url_fetch(WEBMESSENGER_URL, TRUE, "Gaim/" VERSION, FALSE, - yahoo_login_page_cb, gc); + url_data = gaim_util_fetch_url(WEBMESSENGER_URL, TRUE, + "Gaim/" VERSION, FALSE, yahoo_login_page_cb, gc); + if (url_data != NULL) + yd->url_datas = g_slist_prepend(yd->url_datas, url_data); gaim_notify_warning(gc, NULL, _("Normal authentication failed!"), _("The normal authentication method has failed. " "This means either your password is incorrect, " @@ -2523,14 +2526,16 @@ return hash; } -static void yahoo_login_page_cb(void *user_data, const char *buf, size_t len) +static void +yahoo_login_page_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *url_text, size_t len, const gchar *error_message) { GaimConnection *gc = (GaimConnection *)user_data; GaimAccount *account = gaim_connection_get_account(gc); struct yahoo_data *yd = gc->proto_data; const char *sn = gaim_account_get_username(account); const char *pass = gaim_connection_get_password(gc); - GHashTable *hash = yahoo_login_page_hash(buf, len); + GHashTable *hash = yahoo_login_page_hash(url_text, len); GString *url = g_string_new("GET http://login.yahoo.com/config/login?login="); char md5[33], *hashp = md5, *chal; int i; @@ -2538,6 +2543,8 @@ GaimCipherContext *context; guchar digest[16]; + yd->url_datas = g_slist_remove(yd->url_datas, url_data); + url = g_string_append(url, sn); url = g_string_append(url, "&passwd="); @@ -2709,6 +2716,11 @@ if (gc->inpa) gaim_input_remove(gc->inpa); + while (yd->url_datas) { + gaim_util_fetch_url_cancel(yd->url_datas->data); + yd->url_datas = g_slist_delete_link(yd->url_datas, yd->url_datas); + } + for (l = yd->confs; l; l = l->next) { GaimConversation *conv = l->data; Modified: trunk/libgaim/protocols/yahoo/yahoo.h =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo.h 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/protocols/yahoo/yahoo.h 2006-08-27 21:13:30 UTC (rev 17060) @@ -139,6 +139,12 @@ struct yahoo_buddy_icon_upload_data *picture_upload_todo; struct _YchtConn *ycht; + + /** + * This linked list contains GaimUtilFetchUrlData structs + * for when we lookup people profile or photo information. + */ + GSList *url_datas; }; #define YAHOO_MAX_STATUS_MESSAGE_LENGTH (255) Modified: trunk/libgaim/protocols/yahoo/yahoo_picture.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo_picture.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/protocols/yahoo/yahoo_picture.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -43,18 +43,27 @@ int checksum; }; -static void yahoo_fetch_picture_cb(void *user_data, const char *pic_data, size_t len) +static void +yahoo_fetch_picture_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *pic_data, size_t len, const gchar *error_message) { - struct yahoo_fetch_picture_data *d = user_data; + struct yahoo_fetch_picture_data *d; + struct yahoo_data *yd; GaimBuddy *b; - if (GAIM_CONNECTION_IS_VALID(d->gc) && len) { + d = user_data; + yd = d->gc->proto_data; + yd->url_datas = g_slist_remove(yd->url_datas, url_data); + + if (error_message != NULL) { + gaim_debug_error("yahoo", "Fetching buddy icon failed: %s\n", error_message); + } else if (len == 0) { + gaim_debug_error("yahoo", "Fetched an icon with length 0. Strange.\n"); + } else { gaim_buddy_icons_set_for_user(gaim_connection_get_account(d->gc), d->who, (void *)pic_data, len); b = gaim_find_buddy(gaim_connection_get_account(d->gc), d->who); if (b) gaim_blist_node_set_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY, d->checksum); - } else { - gaim_debug_error("yahoo", "Fetching buddy icon failed.\n"); } g_free(d->who); @@ -63,6 +72,7 @@ void yahoo_process_picture(GaimConnection *gc, struct yahoo_packet *pkt) { + struct yahoo_data *yd; GSList *l = pkt->hash; char *who = NULL, *us = NULL; gboolean got_icon_info = FALSE, send_icon_info = FALSE; @@ -104,6 +114,7 @@ /* Yahoo IM 6 spits out 0.png as the URL if the buddy icon is not set */ if (who && got_icon_info && url && !strncasecmp(url, "http://", 7)) { /* TODO: make this work p2p, try p2p before the url */ + GaimUtilFetchUrlData *url_data; struct yahoo_fetch_picture_data *data; GaimBuddy *b = gaim_find_buddy(gc->account, who); if (b && (checksum == gaim_blist_node_get_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY))) @@ -113,8 +124,16 @@ data->gc = gc; data->who = g_strdup(who); data->checksum = checksum; - gaim_url_fetch(url, FALSE, "Mozilla/4.0 (compatible; MSIE 5.0)", FALSE, - yahoo_fetch_picture_cb, data); + url_data = gaim_util_fetch_url(url, FALSE, + "Mozilla/4.0 (compatible; MSIE 5.0)", FALSE, + yahoo_fetch_picture_cb, data); + if (url_data != NULL) { + yd = gc->proto_data; + yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + } else { + g_free(data->who); + g_free(data); + } } else if (who && send_icon_info) { yahoo_send_picture_info(gc, who); } Modified: trunk/libgaim/protocols/yahoo/yahoo_profile.c =================================================================== --- trunk/libgaim/protocols/yahoo/yahoo_profile.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/protocols/yahoo/yahoo_profile.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -742,13 +742,16 @@ return it; } -static void yahoo_got_photo(void *data, const char *url_text, size_t len); +static void +yahoo_got_photo(GaimUtilFetchUrlData *url_data, gpointer data, + const gchar *url_text, size_t len, const gchar *error_message); #endif /* PHOTO_SUPPORT */ -static void yahoo_got_info(void *data, const char *url_text, size_t len) +static void yahoo_got_info(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *url_text, size_t len, const gchar *error_message) { - YahooGetInfoData *info_data = (YahooGetInfoData *)data; + YahooGetInfoData *info_data = (YahooGetInfoData *)user_data; char *p; char buf[1024]; #if PHOTO_SUPPORT @@ -771,26 +774,22 @@ const char *title; profile_state_t profile_state = PROFILE_STATE_DEFAULT; - if (!GAIM_CONNECTION_IS_VALID(info_data->gc)) { - g_free(info_data->name); - g_free(info_data); - return; - } - gaim_debug_info("yahoo", "In yahoo_got_info\n"); yd = info_data->gc->proto_data; - title = (yd->jp? _("Yahoo! Japan Profile") : - _("Yahoo! Profile")); + yd->url_datas = g_slist_remove(yd->url_datas, url_data); + title = yd->jp ? _("Yahoo! Japan Profile") : + _("Yahoo! Profile"); + /* Get the tooltip info string */ tooltip_text = yahoo_tooltip_info_text(info_data); - + /* We failed to grab the profile URL. This is not expected to actually * happen except under unusual error conditions, as Yahoo is observed * to send back HTML, with a 200 status code. */ - if (url_text == NULL || strcmp(url_text, "") == 0) { + if (error_message != NULL || url_text == NULL || strcmp(url_text, "") == 0) { g_snprintf(buf, 1024, "<html><body>%s<b>%s</b></body></html>", tooltip_text, _("Error retrieving profile")); @@ -920,21 +919,32 @@ /* Try to put the photo in there too, if there's one */ if (photo_url_text) { + GaimUtilFetchUrlData *url_data; /* User-uploaded photos use a different server that requires the Host * header, but Yahoo Japan will use the "chunked" content encoding if - * we specify HTTP 1.1. So we have to specify 1.0 & fix gaim_url_fetch + * we specify HTTP 1.1. So we have to specify 1.0 & fix gaim_util_fetch_url */ - gaim_url_fetch(photo_url_text, FALSE, NULL, FALSE, yahoo_got_photo, - info2_data); + url_data = gaim_util_fetch_url(photo_url_text, FALSE, NULL, + FALSE, yahoo_got_photo, info2_data); + if (url_data != NULL) + yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + else { + g_free(info2_data->info_data->name); + g_free(info2_data->info_data); + g_free(info2_data); + } } else { /* Emulate a callback */ - yahoo_got_photo(info2_data, NULL, 0); + yahoo_got_photo(NULL, info2_data, NULL, 0, NULL); } } -static void yahoo_got_photo(void *data, const char *url_text, size_t len) +static void +yahoo_got_photo(GaimUtilFetchUrlData *url_data, gpointer data, + const gchar *url_text, size_t len, const gchar *error_message) { YahooGetInfoStepTwoData *info2_data = (YahooGetInfoStepTwoData *)data; + struct yahoo_data *yd; gboolean found = FALSE; int id = -1; @@ -962,6 +972,10 @@ /* </dd> and not \n. The prpl's need to be audited before it can be moved */ /* in to gaim_markup_strip_html*/ char *fudged_buffer; + + yd = info_data->gc->proto_data; + yd->url_datas = g_slist_remove(yd->url_datas, url_data); + fudged_buffer = gaim_strcasereplace(url_buffer, "</dd>", "</dd><br>"); /* nuke the html, it's easier than trying to parse the horrid stuff */ stripped = gaim_markup_strip_html(fudged_buffer); @@ -1197,7 +1211,6 @@ "however, Yahoo! sometimes does fail to find a user's " "profile. If you know that the user exists, " "please try again later.")); - } else { g_string_append_printf(s, "%s<br><br>", _("The user's profile is empty.")); @@ -1245,15 +1258,22 @@ struct yahoo_data *yd = gc->proto_data; YahooGetInfoData *data; char *url; + GaimUtilFetchUrlData *url_data; data = g_new0(YahooGetInfoData, 1); data->gc = gc; data->name = g_strdup(name); url = g_strdup_printf("%s%s", - (yd->jp? YAHOOJP_PROFILE_URL: YAHOO_PROFILE_URL), name); + (yd->jp ? YAHOOJP_PROFILE_URL : YAHOO_PROFILE_URL), name); - gaim_url_fetch(url, TRUE, NULL, FALSE, yahoo_got_info, data); + url_data = gaim_util_fetch_url(url, TRUE, NULL, FALSE, yahoo_got_info, data); + if (url_data != NULL) + yd->url_datas = g_slist_prepend(yd->url_datas, url_data); + else { + g_free(data->name); + g_free(data); + } g_free(url); } Modified: trunk/libgaim/upnp.c =================================================================== --- trunk/libgaim/upnp.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/upnp.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -150,7 +150,6 @@ static void lookup_public_ip(void); static void lookup_internal_ip(void); - static void fire_discovery_callbacks(gboolean success) { @@ -164,7 +163,6 @@ } } - static gboolean gaim_upnp_compare_device(const xmlnode* device, const gchar* deviceType) { @@ -183,7 +181,6 @@ return ret; } - static gboolean gaim_upnp_compare_service(const xmlnode* service, const gchar* serviceType) { @@ -208,7 +205,6 @@ return ret; } - static gchar* gaim_upnp_parse_description_response(const gchar* httpResponse, gsize len, const gchar* httpURL, const gchar* serviceType) @@ -358,9 +354,10 @@ } static void -upnp_parse_description_cb(void *data, const char *httpResponse, gsize len) +upnp_parse_description_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *httpResponse, gsize len, const gchar *error_message) { - UPnPDiscoveryData *dd = data; + UPnPDiscoveryData *dd = user_data; gchar *control_url = NULL; if (len > 0) @@ -431,7 +428,7 @@ gaim_timeout_remove(dd->tima); dd->tima = 0; - gaim_url_fetch_request(descriptionURL, TRUE, NULL, TRUE, httpRequest, + gaim_util_fetch_url_request(descriptionURL, TRUE, NULL, TRUE, httpRequest, TRUE, upnp_parse_description_cb, dd); g_free(httpRequest); @@ -548,7 +545,7 @@ /* We'll either time out or continue successfully */ } -void +static void gaim_upnp_discover_send_broadcast(UPnPDiscoveryData *dd) { gchar *sendMessage = NULL; @@ -598,7 +595,6 @@ gaim_timeout_add(10, gaim_upnp_discover_timeout, dd); } - void gaim_upnp_discover(GaimUPnPCallback cb, gpointer cb_data) { @@ -661,7 +657,7 @@ static void gaim_upnp_generate_action_message_and_send(const gchar* actionName, - const gchar* actionParams, GaimURLFetchCallback cb, + const gchar* actionParams, GaimUtilFetchUrlCallback cb, gpointer cb_data) { @@ -678,7 +674,7 @@ "generate_action_message_and_send(): Failed In Parse URL\n\n"); /* XXX: This should probably be async */ if(cb) - cb(cb_data, NULL, 0); + cb(NULL, cb_data, NULL, 0, NULL); } if(port == 0 || port == -1) { port = DEFAULT_HTTP_PORT; @@ -696,14 +692,13 @@ g_free(pathOfControl); g_free(soapMessage); - gaim_url_fetch_request(control_info.control_url, FALSE, NULL, TRUE, + gaim_util_fetch_url_request(control_info.control_url, FALSE, NULL, TRUE, totalSendMessage, TRUE, cb, cb_data); g_free(totalSendMessage); g_free(addressOfControl); } - const gchar * gaim_upnp_get_public_ip() { @@ -722,11 +717,12 @@ } static void -looked_up_public_ip_cb(gpointer data, const char *httpResponse, gsize len) +looked_up_public_ip_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *httpResponse, gsize len, const gchar *error_message) { gchar* temp, *temp2; - if(!httpResponse) + if ((error_message != NULL) || (httpResponse == NULL)) return; /* extract the ip, or see if there is an error */ @@ -754,7 +750,7 @@ gaim_debug_info("upnp", "NAT Returned IP: %s\n", control_info.publicip); } -void +static void lookup_public_ip() { gaim_upnp_generate_action_message_and_send("GetExternalIPAddress", "", @@ -794,7 +790,7 @@ } -void +static void lookup_internal_ip() { gchar* addressOfControl; @@ -821,14 +817,17 @@ } static void -done_port_mapping_cb(gpointer data, const gchar *httpResponse, gsize len) +done_port_mapping_cb(GaimUtilFetchUrlData *url_data, gpointer user_data, + const gchar *httpResponse, gsize len, const gchar *error_message) { - UPnPMappingAddRemove *ar = data; + UPnPMappingAddRemove *ar = user_data; gboolean success = TRUE; /* determine if port mapping was a success */ - if(!httpResponse || g_strstr_len(httpResponse, len, HTTP_OK) == NULL) { + if ((error_message != NULL) || (httpResponse == NULL) || + (g_strstr_len(httpResponse, len, HTTP_OK) == NULL)) + { gaim_debug_error("upnp", "gaim_upnp_set_port_mapping(): Failed HTTP_OK\n\n%s\n\n", httpResponse ? httpResponse : "(null)"); Modified: trunk/libgaim/util.c =================================================================== --- trunk/libgaim/util.c 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/util.c 2006-08-27 21:13:30 UTC (rev 17060) @@ -29,9 +29,9 @@ #include "prefs.h" #include "util.h" -typedef struct +struct _GaimUtilFetchUrlData { - void (*callback)(void *, const char *, size_t); + GaimUtilFetchUrlCallback callback; void *user_data; struct @@ -52,16 +52,17 @@ gsize request_written; gboolean include_headers; - int inpa; + GaimProxyConnectData *connect_data; + int fd; + guint inpa; gboolean got_headers; gboolean has_explicit_data_len; char *webdata; unsigned long len; unsigned long data_len; +}; -} GaimFetchUrlData; - static char custom_home_dir[MAXPATHLEN]; static char home_dir[MAXPATHLEN]; @@ -3059,24 +3060,28 @@ return TRUE; } +/** + * The arguments to this function are similar to printf. + */ static void -destroy_fetch_url_data(GaimFetchUrlData *gfud) +gaim_util_fetch_url_error(GaimUtilFetchUrlData *gfud, const char *format, ...) { - g_free(gfud->webdata); - g_free(gfud->url); - g_free(gfud->user_agent); - g_free(gfud->website.address); - g_free(gfud->website.page); - g_free(gfud->website.user); - g_free(gfud->website.passwd); - g_free(gfud->request); + gchar *error_message; + va_list args; - g_free(gfud); + va_start(args, format); + error_message = g_strdup_vprintf(format, args); + va_end(args); + + gfud->callback(gfud, gfud->user_data, NULL, 0, error_message); + g_free(error_message); + gaim_util_fetch_url_cancel(gfud); } +/* TODO: This totally destroys cancelability. */ static gboolean parse_redirect(const char *data, size_t data_len, gint sock, - GaimFetchUrlData *gfud) + GaimUtilFetchUrlData *gfud) { gchar *s; @@ -3116,20 +3121,16 @@ full = FALSE; } - /* Close the existing stuff. */ - gaim_input_remove(gfud->inpa); - close(sock); + gaim_debug_info("util", "Redirecting to %s\n", new_url); - gaim_debug_info("gaim_url_fetch", "Redirecting to %s\n", new_url); - /* Try again, with this new location. */ - gaim_url_fetch_request(new_url, full, gfud->user_agent, + gaim_util_fetch_url_request(new_url, full, gfud->user_agent, gfud->http11, NULL, gfud->include_headers, gfud->callback, gfud->user_data); - /* Free up. */ + /* Free the old connection */ g_free(new_url); - destroy_fetch_url_data(gfud); + gaim_util_fetch_url_cancel(gfud); return TRUE; } @@ -3173,7 +3174,7 @@ */ if (p && g_strstr_len(p, data_len - (p - data), "\n")) { sscanf(p, "%" G_GSIZE_FORMAT, &content_len); - gaim_debug_misc("parse_content_len", "parsed %u\n", content_len); + gaim_debug_misc("util", "parsed %u\n", content_len); } return content_len; @@ -3183,14 +3184,14 @@ static void url_fetch_recv_cb(gpointer url_data, gint source, GaimInputCondition cond) { - GaimFetchUrlData *gfud = url_data; + GaimUtilFetchUrlData *gfud = url_data; int len; char buf[4096]; char *data_cursor; gboolean got_eof = FALSE; while((len = read(source, buf, sizeof(buf))) > 0) { - /* If we've filled up our butfer, make it bigger */ + /* If we've filled up our buffer, make it bigger */ if((gfud->len + len) >= gfud->data_len) { while((gfud->len + len) >= gfud->data_len) gfud->data_len += sizeof(buf); @@ -3209,13 +3210,13 @@ if(!gfud->got_headers) { char *tmp; - /** See if we've reached the end of the headers yet */ + /* See if we've reached the end of the headers yet */ if((tmp = strstr(gfud->webdata, "\r\n\r\n"))) { char * new_data; guint header_len = (tmp + 4 - gfud->webdata); size_t content_len; - gaim_debug_misc("gaim_url_fetch", "Response headers: '%.*s'\n", + gaim_debug_misc("util", "Response headers: '%.*s'\n", header_len, gfud->webdata); /* See if we can find a redirect. */ @@ -3249,12 +3250,14 @@ new_data = g_try_malloc(content_len); if(new_data == NULL) { - gaim_debug_error("gaim_url_fetch", "Failed to allocate %u bytes: %s\n", - content_len, strerror(errno)); - gaim_input_remove(gfud->inpa); - close(source); - gfud->callback(gfud->user_data, NULL, 0); - destroy_fetch_url_data(gfud); + gaim_debug_error("util", + "Failed to allocate %u bytes: %s\n", + content_len, strerror(errno)); + gaim_util_fetch_url_error(gfud, + _("Unable to allocate enough memory to hold " + "the contents from %s. The web server may " + "be trying something malicious."), + gfud->website.address); return; } @@ -3288,12 +3291,8 @@ } else if(errno != ETIMEDOUT) { got_eof = TRUE; } else { - gaim_input_remove(gfud->inpa); - close(source); - - gfud->callback(gfud->user_data, NULL, 0); - - destroy_fetch_url_data(gfud); + gaim_util_fetch_url_error(gfud, _("Error reading from %s: %s"), + gfud->website.address, strerror(errno)); return; } } @@ -3302,63 +3301,59 @@ gfud->webdata = g_realloc(gfud->webdata, gfud->len + 1); gfud->webdata[gfud->len] = '\0'; - /* gaim_debug_misc("gaim_url_fetch", "Received: '%s'\n", gfud->webdata); */ - - gaim_input_remove(gfud->inpa); - close(source); - gfud->callback(gfud->user_data, gfud->webdata, gfud->len); - - destroy_fetch_url_data(gfud); + gfud->callback(gfud, gfud->user_data, gfud->webdata, gfud->len, NULL); + gaim_util_fetch_url_cancel(gfud); } } static void url_fetch_send_cb(gpointer data, gint source, GaimInputCondition cond) { - GaimFetchUrlData *gfud; + GaimUtilFetchUrlData *gfud; int len, total_len; gfud = data; total_len = strlen(gfud->request); - len = write(source, gfud->request + gfud->request_written, + len = write(gfud->fd, gfud->request + gfud->request_written, total_len - gfud->request_written); - if(len < 0 && errno == EAGAIN) + if (len < 0 && errno == EAGAIN) return; - else if(len < 0) { - gaim_input_remove(gfud->inpa); - close(source); - gfud->callback(gfud->user_data, NULL, 0); - destroy_fetch_url_data(gfud); + else if (len < 0) { + gaim_util_fetch_url_error(gfud, _("Error writing to %s: %s"), + gfud->website.address, strerror(errno)); return; } gfud->request_written += len; - if(gfud->request_written != total_len) + if (gfud->request_written != total_len) return; - /* We're done writing, now start reading */ + /* We're done writing our request, now start reading the response */ gaim_input_remove(gfud->inpa); - gfud->inpa = gaim_input_add(source, GAIM_INPUT_READ, url_fetch_recv_cb, + gfud->inpa = gaim_input_add(gfud->fd, GAIM_INPUT_READ, url_fetch_recv_cb, gfud); } static void url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message) { - GaimFetchUrlData *gfud; + GaimUtilFetchUrlData *gfud; gfud = url_data; + gfud->connect_data = NULL; if (source == -1) { - gfud->callback(gfud->user_data, NULL, 0); - destroy_fetch_url_data(gfud); + gaim_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), + gfud->website.address, error_message); return; } + gfud->fd = source; + if (!gfud->request) { if (gfud->user_agent) { @@ -3390,31 +3385,31 @@ } } - gaim_debug_misc("gaim_url_fetch", "Request: '%s'\n", gfud->request); + gaim_debug_misc("util", "Request: '%s'\n", gfud->request); gfud->inpa = gaim_input_add(source, GAIM_INPUT_WRITE, url_fetch_send_cb, gfud); url_fetch_send_cb(gfud, source, GAIM_INPUT_WRITE); } -void -gaim_url_fetch_request(const char *url, gboolean full, +GaimUtilFetchUrlData * +gaim_util_fetch_url_request(const char *url, gboolean full, const char *user_agent, gboolean http11, const char *request, gboolean include_headers, - GaimURLFetchCallback cb, void *user_data) + GaimUtilFetchUrlCallback callback, void *user_data) { - GaimFetchUrlData *gfud; + GaimUtilFetchUrlData *gfud; - g_return_if_fail(url != NULL); - g_return_if_fail(cb != NULL); + g_return_val_if_fail(url != NULL, NULL); + g_return_val_if_fail(callback != NULL, NULL); - gaim_debug_info("gaim_url_fetch", + gaim_debug_info("util", "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", url, full, user_agent?user_agent:"(null)", http11); - gfud = g_new0(GaimFetchUrlData, 1); + gfud = g_new0(GaimUtilFetchUrlData, 1); - gfud->callback = cb; + gfud->callback = callback; gfud->user_data = user_data; gfud->url = g_strdup(url); gfud->user_agent = g_strdup(user_agent); @@ -3426,15 +3421,44 @@ gaim_url_parse(url, &gfud->website.address, &gfud->website.port, &gfud->website.page, &gfud->website.user, &gfud->website.passwd); - if (gaim_proxy_connect(NULL, gfud->website.address, - gfud->website.port, url_fetch_connect_cb, gfud) == NULL) + gfud->connect_data = gaim_proxy_connect(NULL, + gfud->website.address, gfud->website.port, + url_fetch_connect_cb, gfud); + + if (gfud->connect_data == NULL) { - destroy_fetch_url_data(gfud); + gaim_util_fetch_url_error(gfud, _("Unable to connect to %s"), + gfud->website.address); + return NULL; + } - cb(user_data, g_strdup(_("g003: Error opening connection.\n")), 0); - } + return gfud; } +void +gaim_util_fetch_url_cancel(GaimUtilFetchUrlData *gfud) +{ + if (gfud->connect_data != NULL) + gaim_proxy_connect_cancel(gfud->connect_data); + + if (gfud->inpa > 0) + gaim_input_remove(gfud->inpa); + + if (gfud->fd >= 0) + close(gfud->fd); + + g_free(gfud->website.user); + g_free(gfud->website.passwd); + g_free(gfud->website.address); + g_free(gfud->website.page); + g_free(gfud->url); + g_free(gfud->user_agent); + g_free(gfud->request); + g_free(gfud->webdata); + + g_free(gfud); +} + const char * gaim_url_decode(const char *str) { Modified: trunk/libgaim/util.h =================================================================== --- trunk/libgaim/util.h 2006-08-27 19:47:41 UTC (rev 17059) +++ trunk/libgaim/util.h 2006-08-27 21:13:30 UTC (rev 17060) @@ -37,6 +37,8 @@ extern "C" { #endif +typedef struct _GaimUtilFetchUrlData GaimUtilFetchUrlData; + typedef struct _GaimMenuAction { char *label; @@ -823,7 +825,22 @@ gboolean gaim_url_parse(const char *url, char **ret_host, int *ret_port, char **ret_path, char **ret_user, char **ret_passwd); -typedef void (*GaimURLFetchCallback) (gpointer data, const char *buf, gsize len); +/** + * This is the signature used for functions that act as the callback + * to gaim_util_fetch_url() or gaim_util_fetch_url_request(). + * + * @param url_data The same value that was returned when you called + * gaim_fetch_url() or gaim_fetch_url_request(). + * @param user_data The user data that your code passed into either + * gaim_util_fetch_url() or gaim_util_fetch_url_request(). + * @param url_text This will be NULL on error. Otherwise this + * will contain the contents of the URL. + * @param len 0 on error, otherwise this is the length of buf. + * @param error_message If something went wrong then this will contain + * a descriptive error message, and buf will be + * NULL and len will be 0. + */ +typedef void (*GaimUtilFetchUrlCallback)(GaimUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message); /** * Fetches the data from a URL, and passes it to a callback function. @@ -836,8 +853,8 @@ * @param cb The callback function. * @param data The user data to pass to the callback function. */ -#define gaim_url_fetch(url, full, user_agent, http11, cb, data) \ - gaim_url_fetch_request(url, full, user_agent, http11, NULL, \ +#define gaim_util_fetch_url(url, full, user_agent, http11, cb, data) \ + gaim_util_fetch_url_request(url, full, user_agent, http11, NULL, \ FALSE, cb, data); /** @@ -850,17 +867,25 @@ * @param http11 TRUE if HTTP/1.1 should be used to download the file. * @param request A HTTP request to send to the server instead of the * standard GET - * @param include_headers if TRUE, include the HTTP headers in the - * response - * @param cb The callback function. + * @param include_headers + * If TRUE, include the HTTP headers in the response. + * @param callback The callback function. * @param data The user data to pass to the callback function. */ -void gaim_url_fetch_request(const char *url, gboolean full, - const char *user_agent, gboolean http11, - const char *request, gboolean include_headers, - GaimURLFetchCallback cb, void *data); +GaimUtilFetchUrlData *gaim_util_fetch_url_request(const gchar *url, + gboolean full, const gchar *user_agent, gboolean http11, + const gchar *request, gboolean include_headers, + GaimUtilFetchUrlCallback callback, gpointer data); /** + * Cancel a pending URL request started with either + * gaim_util_fetch_url_request() or gaim_util_fetch_url(). + * + * @param url_data The data returned when you initiated the URL fetch. + */ +void gaim_util_fetch_url_cancel(GaimUtilFetchUrlData *url_data); + +/** * Decodes a URL into a plain string. * * This will change hex codes and such to their ascii equivalents. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-01 20:19:18
|
Revision: 17117 http://svn.sourceforge.net/gaim/?rev=17117&view=rev Author: seanegan Date: 2006-09-01 13:13:47 -0700 (Fri, 01 Sep 2006) Log Message: ----------- I really like this. Some changes to the Buddy List: - Everything is one column now. So things like the group name ellipsizing for buddy icons that aren't there won't happen anymore. - Expander Icon set to an invisible column: the correct way to get rid of the unsightly large blist expander margins - Group nodes have a background color to more easily tell them apart, now that the margins are gone. This could be extended to buddies. I'm thinking of making a notify mode that colors buddies in the list when you have a message from them. I'm doing this on expanded contacts, but I don't think I like it. - Expanders are now temporarily pixbufs; this will change to something better later Modified Paths: -------------- trunk/gtk/gaimstock.c trunk/gtk/gaimstock.h trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/pixmaps/Makefile.am Modified: trunk/gtk/gaimstock.c =================================================================== --- trunk/gtk/gaimstock.c 2006-09-01 18:34:53 UTC (rev 17116) +++ trunk/gtk/gaimstock.c 2006-09-01 20:13:47 UTC (rev 17117) @@ -129,7 +129,9 @@ { GAIM_STOCK_STATUS_CONNECT1, "gaim", "status-connect1.png" }, { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, - { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP } + { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP }, + { GAIM_STOCK_EXPANDER_EXPANDED,"gaim", "expander-expanded.png" }, + { GAIM_STOCK_EXPANDER_COLLAPSED,"gaim", "expander-collapsed.png" }, }; static const GtkStockItem stock_items[] = Modified: trunk/gtk/gaimstock.h =================================================================== --- trunk/gtk/gaimstock.h 2006-09-01 18:34:53 UTC (rev 17116) +++ trunk/gtk/gaimstock.h 2006-09-01 20:13:47 UTC (rev 17117) @@ -98,6 +98,8 @@ #define GAIM_STOCK_TYPING "gaim-typing" #define GAIM_STOCK_UPLOAD "gaim-upload" #define GAIM_STOCK_VOICE_CHAT "gaim-voice-chat" +#define GAIM_STOCK_EXPANDER_EXPANDED "gaim-stock-expander-expanded" +#define GAIM_STOCK_EXPANDER_COLLAPSED "gaim-stock-expander-collapsed" /*@}*/ /** Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-09-01 18:34:53 UTC (rev 17116) +++ trunk/gtk/gtkblist.c 2006-09-01 20:13:47 UTC (rev 17117) @@ -3936,6 +3936,7 @@ accountmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Accounts")); + /****************************** GtkTreeView **********************************/ sw = gtk_scrolled_window_new(NULL,NULL); gtk_widget_show(sw); @@ -3943,8 +3944,10 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS, - GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, - G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER); + GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, + G_TYPE_POINTER, GDK_TYPE_COLOR, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF, + G_TYPE_BOOLEAN); gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel)); @@ -3976,40 +3979,71 @@ g_signal_connect(G_OBJECT(gtkblist->treeview), "leave-notify-event", G_CALLBACK(gaim_gtk_blist_leave_cb), NULL); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(gtkblist->treeview), FALSE); + + column = gtk_tree_view_column_new(); + gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column); + gtk_tree_view_column_set_visible(column, FALSE); + gtk_tree_view_set_expander_column(GTK_TREE_VIEW(gtkblist->treeview), column); gtkblist->text_column = column = gtk_tree_view_column_new (); + rend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "pixbuf", GROUP_EXPANDER_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, + NULL); rend = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, - "pixbuf", STATUS_ICON_COLUMN, - "visible", STATUS_ICON_VISIBLE_COLUMN, - NULL); + "pixbuf", CONTACT_EXPANDER_COLUMN, + "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, + NULL); + + rend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "pixbuf", STATUS_ICON_COLUMN, + "visible", STATUS_ICON_VISIBLE_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, + NULL); g_object_set(rend, "xalign", 0.0, "ypad", 0, NULL); gtkblist->text_rend = rend = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start (column, rend, TRUE); gtk_tree_view_column_set_attributes(column, rend, + "cell-background-gdk", BGCOLOR_COLUMN, "markup", NAME_COLUMN, NULL); g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), NULL); g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); #if GTK_CHECK_VERSION(2,6,0) - gtk_tree_view_column_set_expand (column, TRUE); g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); #endif gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column); rend = gtk_cell_renderer_text_new(); - gtkblist->idle_column = gtk_tree_view_column_new_with_attributes("Idle", rend, "markup", IDLE_COLUMN, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->idle_column); g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); - + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "markup", IDLE_COLUMN, + "visible", IDLE_VISIBLE_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, + NULL); + rend = gtk_cell_renderer_pixbuf_new(); - gtkblist->buddy_icon_column = gtk_tree_view_column_new_with_attributes("Buddy Icon", rend, "pixbuf", BUDDY_ICON_COLUMN, NULL); g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->buddy_icon_column); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN, + "cell-background-gdk", BGCOLOR_COLUMN, + "visible", BUDDY_ICON_VISIBLE_COLUMN, + NULL); + + gtkblist->expander_expanded = gtk_widget_render_icon(gtkblist->treeview, GAIM_STOCK_EXPANDER_EXPANDED, -1, NULL); + gtkblist->expander_collapsed = gtk_widget_render_icon(gtkblist->treeview, GAIM_STOCK_EXPANDER_COLLAPSED, -1, NULL); + g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL); g_signal_connect(G_OBJECT(gtkblist->treeview), "row-expanded", G_CALLBACK(gtk_blist_row_expanded_cb), NULL); g_signal_connect(G_OBJECT(gtkblist->treeview), "row-collapsed", G_CALLBACK(gtk_blist_row_collapsed_cb), NULL); @@ -4332,6 +4366,13 @@ int count; gboolean show = FALSE; GaimBlistNode* gnode; + GdkColor bgcolor; + GdkColor textcolor; + + if (gtkblist) { + bgcolor = gtkblist->treeview->style->base[GTK_STATE_ACTIVE]; + textcolor = gtkblist->treeview->style->text[GTK_STATE_ACTIVE]; + } g_return_if_fail(node != NULL); @@ -4360,22 +4401,34 @@ if (show) { char *mark, *esc; GtkTreeIter iter; + GtkTreePath *path; + gboolean expanded; if(!insert_node(list, gnode, &iter)) return; + path = gtk_tree_model_get_path(gtkblist->treemodel, &iter); + expanded = gtk_tree_view_row_expanded(gtkblist->treeview, path); + gtk_tree_path_free(path); + esc = g_markup_escape_text(group->name, -1); - mark = g_strdup_printf("<span weight='bold'>%s</span> (%d/%d)", - esc, gaim_blist_get_group_online_count(group), - gaim_blist_get_group_size(group, FALSE)); + mark = g_strdup_printf("<span color='#%02x%02x%02x'><span weight='bold'>%s</span> (%d/%d)</span>", + textcolor.red>>8, textcolor.green>>8, textcolor.blue>>8, + esc, gaim_blist_get_group_online_count(group), + gaim_blist_get_group_size(group, FALSE)); g_free(esc); - + gtk_tree_store_set(gtkblist->treemodel, &iter, - STATUS_ICON_COLUMN, NULL, - STATUS_ICON_VISIBLE_COLUMN, FALSE, - NAME_COLUMN, mark, - NODE_COLUMN, gnode, - -1); + STATUS_ICON_VISIBLE_COLUMN, FALSE, + STATUS_ICON_COLUMN, NULL, + NAME_COLUMN, mark, + NODE_COLUMN, gnode, + BGCOLOR_COLUMN, &bgcolor, + GROUP_EXPANDER_COLUMN, expanded ? gtkblist->expander_expanded : gtkblist->expander_collapsed, + CONTACT_EXPANDER_VISIBLE_COLUMN, FALSE, + BUDDY_ICON_VISIBLE_COLUMN, FALSE, + IDLE_VISIBLE_COLUMN, FALSE, + -1); g_free(mark); } else { gaim_gtk_blist_hide_node(list, gnode, TRUE); @@ -4385,16 +4438,17 @@ static void buddy_node(GaimBuddy *buddy, GtkTreeIter *iter, GaimBlistNode *node) { GaimPresence *presence; + GdkColor expandcolor; GdkPixbuf *status, *avatar; char *mark; char *idle = NULL; + gboolean expanded = ((struct _gaim_gtk_blist_node*)(node->parent->ui_data))->contact_expanded; gboolean selected = (gtkblist->selected_node == node); - + gboolean biglist = gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"); presence = gaim_buddy_get_presence(buddy); status = gaim_gtk_blist_get_status_icon((GaimBlistNode*)buddy, - (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") - ? GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); + biglist ? GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL); avatar = gaim_gtk_blist_get_buddy_icon((GaimBlistNode *)buddy, TRUE, TRUE); mark = gaim_gtk_blist_get_name_markup(buddy, selected); @@ -4426,12 +4480,26 @@ } } + if (expanded) { + GdkColor fore = gtkblist->treeview->style->base[GTK_STATE_ACTIVE]; + GdkColor back = gtkblist->treeview->style->base[GTK_STATE_NORMAL]; + expandcolor.red = (fore.red + back.red) / 2; + expandcolor.green = (fore.green + back.green) / 2; + expandcolor.blue = (fore.blue + back.blue) / 2; + } + + gtk_tree_store_set(gtkblist->treemodel, iter, - STATUS_ICON_COLUMN, status, - STATUS_ICON_VISIBLE_COLUMN, TRUE, - NAME_COLUMN, mark, - IDLE_COLUMN, idle, - BUDDY_ICON_COLUMN, avatar, + STATUS_ICON_COLUMN, status, + STATUS_ICON_VISIBLE_COLUMN, TRUE, + NAME_COLUMN, mark, + IDLE_COLUMN, idle, + IDLE_VISIBLE_COLUMN, !biglist && idle, + BUDDY_ICON_COLUMN, avatar, + BUDDY_ICON_VISIBLE_COLUMN, biglist, + BGCOLOR_COLUMN, expanded ? &expandcolor : NULL, + CONTACT_EXPANDER_COLUMN, NULL, + CONTACT_EXPANDER_VISIBLE_COLUMN, expanded, -1); g_free(mark); @@ -4450,6 +4518,13 @@ GaimContact *contact; GaimBuddy *buddy; struct _gaim_gtk_blist_node *gtknode; + GdkColor bgcolor; + GdkColor textcolor; + + if (gtkblist) { + bgcolor = gtkblist->treeview->style->base[GTK_STATE_ACTIVE]; + textcolor = gtkblist->treeview->style->text[GTK_STATE_ACTIVE]; + } if (GAIM_BLIST_NODE_IS_BUDDY(node)) cnode = node->parent; @@ -4479,21 +4554,29 @@ if(gtknode->contact_expanded) { GdkPixbuf *status; char *mark; + char *white; status = gaim_gtk_blist_get_status_icon(cnode, (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") ? GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); mark = g_markup_escape_text(gaim_contact_get_alias(contact), -1); - + white = g_strdup_printf("<span color='#%02x%02x%02x'>%s</span>", + textcolor.red>>8, textcolor.green>>8, textcolor.blue>>8, + mark); + g_free(mark); gtk_tree_store_set(gtkblist->treemodel, &iter, - STATUS_ICON_COLUMN, status, - STATUS_ICON_VISIBLE_COLUMN, TRUE, - NAME_COLUMN, mark, - IDLE_COLUMN, NULL, - BUDDY_ICON_COLUMN, NULL, + STATUS_ICON_COLUMN, status, + STATUS_ICON_VISIBLE_COLUMN, TRUE, + NAME_COLUMN, white, + IDLE_COLUMN, NULL, + IDLE_VISIBLE_COLUMN, FALSE, + BGCOLOR_COLUMN, &bgcolor, + BUDDY_ICON_COLUMN, NULL, + CONTACT_EXPANDER_COLUMN, gtkblist->expander_expanded, + CONTACT_EXPANDER_VISIBLE_COLUMN, TRUE, -1); - g_free(mark); + g_free(white); if(status) g_object_unref(status); } else { Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-09-01 18:34:53 UTC (rev 17116) +++ trunk/gtk/gtkblist.h 2006-09-01 20:13:47 UTC (rev 17117) @@ -32,8 +32,14 @@ STATUS_ICON_VISIBLE_COLUMN, NAME_COLUMN, IDLE_COLUMN, + IDLE_VISIBLE_COLUMN, BUDDY_ICON_COLUMN, + BUDDY_ICON_VISIBLE_COLUMN, NODE_COLUMN, + BGCOLOR_COLUMN, + GROUP_EXPANDER_COLUMN, + CONTACT_EXPANDER_COLUMN, + CONTACT_EXPANDER_VISIBLE_COLUMN, BLIST_COLUMNS }; @@ -93,7 +99,8 @@ GtkWidget *statusbox; /**< The status selector dropdown */ GdkPixbuf *east, *south; /**< Drop shadow stuff */ GdkWindow *east_shadow, *south_shadow; /**< Drop shadow stuff */ - + GdkPixbuf *expander_collapsed; /**< A collapsed expander */ + GdkPixbuf *expander_expanded; /**< An expanded expander */ }; #define GAIM_GTK_BLIST(list) ((GaimGtkBuddyList *)(list)->ui_data) Modified: trunk/gtk/pixmaps/Makefile.am =================================================================== --- trunk/gtk/pixmaps/Makefile.am 2006-09-01 18:34:53 UTC (rev 17116) +++ trunk/gtk/pixmaps/Makefile.am 2006-09-01 20:13:47 UTC (rev 17117) @@ -8,6 +8,8 @@ change-fgcolor-small.png \ connect.png \ edit.png \ + expander-expanded.png \ + expander-collapsed.png \ gaim.png \ gaim.svg \ gaim_auth.png \ @@ -82,7 +84,7 @@ gaimiconpix_DATA = away.png connect.png msgpend.png offline.png online.png msgunread.png stock_connect_16.png stock_disconnect_16.png gaimdistpixdir = $(datadir)/pixmaps/gaim -gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png +gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png expander-expanded.png expander-collapsed.png distpixmapdir = $(datadir)/pixmaps distpixmap_DATA = gaim.png gaim.svg This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-09-04 23:26:56
|
Revision: 17162 http://svn.sourceforge.net/gaim/?rev=17162&view=rev Author: datallah Date: 2006-09-04 16:26:50 -0700 (Mon, 04 Sep 2006) Log Message: ----------- It turns out gaim_gtk_blist_update_toolbar() has been gone for almost 2 years and gaim_gtkconv_update_tabs has been gone for over 3. Modified Paths: -------------- trunk/gtk/gtkblist.h trunk/gtk/gtkconv.h trunk/gtk/plugins/perl/common/GtkBlist.xs trunk/gtk/plugins/perl/common/GtkConv.xs Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-09-04 23:00:13 UTC (rev 17161) +++ trunk/gtk/gtkblist.h 2006-09-04 23:26:50 UTC (rev 17162) @@ -163,12 +163,6 @@ */ void gaim_gtk_blist_refresh(GaimBuddyList *list); -/** - * Tells the buddy list to update its toolbar based on the preferences - * - */ -void gaim_gtk_blist_update_toolbar(void); - void gaim_gtk_blist_update_columns(void); void gaim_gtk_blist_update_refresh_timeout(void); Modified: trunk/gtk/gtkconv.h =================================================================== --- trunk/gtk/gtkconv.h 2006-09-04 23:00:13 UTC (rev 17161) +++ trunk/gtk/gtkconv.h 2006-09-04 23:26:50 UTC (rev 17162) @@ -179,12 +179,6 @@ void gaim_gtkconv_switch_active_conversation(GaimConversation *conv); /** - * Updates the tab positions on all conversation windows to reflect any - * changed preferences. - */ -void gaim_gtkconv_update_tabs(void); - -/** * Updates conversation buttons by protocol. * * @param conv The conversation. Modified: trunk/gtk/plugins/perl/common/GtkBlist.xs =================================================================== --- trunk/gtk/plugins/perl/common/GtkBlist.xs 2006-09-04 23:00:13 UTC (rev 17161) +++ trunk/gtk/plugins/perl/common/GtkBlist.xs 2006-09-04 23:26:50 UTC (rev 17162) @@ -51,13 +51,7 @@ gaim_gtk_blist_refresh(list) Gaim::BuddyList list -#if 0 void -gaim_gtk_blist_update_toolbar() - -#endif - -void gaim_gtk_blist_update_columns() void Modified: trunk/gtk/plugins/perl/common/GtkConv.xs =================================================================== --- trunk/gtk/plugins/perl/common/GtkConv.xs 2006-09-04 23:00:13 UTC (rev 17161) +++ trunk/gtk/plugins/perl/common/GtkConv.xs 2006-09-04 23:26:50 UTC (rev 17162) @@ -50,13 +50,7 @@ gaim_gtkconv_switch_active_conversation(conv) Gaim::Conversation conv -#if 0 void -gaim_gtkconv_update_tabs() - -#endif - -void gaim_gtkconv_update_buttons_by_protocol(conv) Gaim::Conversation conv This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-06 00:04:49
|
Revision: 17170 http://svn.sourceforge.net/gaim/?rev=17170&view=rev Author: seanegan Date: 2006-09-05 17:04:45 -0700 (Tue, 05 Sep 2006) Log Message: ----------- Get rid of old fields Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-09-05 16:13:57 UTC (rev 17169) +++ trunk/gtk/gtkblist.c 2006-09-06 00:04:45 UTC (rev 17170) @@ -3525,28 +3525,6 @@ return ((struct _gaim_gtk_blist_node *)node->ui_data)->contact_expanded; } -void gaim_gtk_blist_update_columns() -{ - if(!gtkblist) - return; - - if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) { - gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, TRUE); - gtk_tree_view_column_set_visible(gtkblist->idle_column, FALSE); - } else { - gtk_tree_view_column_set_visible(gtkblist->idle_column, - gaim_prefs_get_bool("/gaim/gtk/blist/show_idle_time")); - gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, FALSE); - } -} - -static void -show_buddy_icons_pref_cb(const char *name, GaimPrefType type, - gconstpointer val, gpointer data) -{ - gaim_gtk_blist_update_columns(); -} - enum { DRAG_BUDDY, DRAG_ROW, @@ -3953,6 +3931,7 @@ gtk_widget_show(gtkblist->treeview); gtk_widget_set_name(gtkblist->treeview, "gaim_gtkblist_treeview"); +/* gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(gtkblist->treeview), TRUE); */ /* Set up selection stuff */ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview)); @@ -4057,7 +4036,6 @@ gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview); - gaim_gtk_blist_update_columns(); /* Create an empty vbox used for showing connection errors */ gtkblist->error_buttons = gtk_vbox_new(FALSE, 0); @@ -4120,12 +4098,6 @@ gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/sort_type", _prefs_change_sort_method, NULL); - /* things that affect what columns are displayed */ - gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_buddy_icons", - show_buddy_icons_pref_cb, NULL); - gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_idle_time", - show_buddy_icons_pref_cb, NULL); - /* menus */ gaim_prefs_connect_callback(handle, "/gaim/gtk/sound/mute", gaim_gtk_blist_mute_pref_cb, NULL); @@ -4720,8 +4692,6 @@ gtkblist->drag_timeout = 0; gtkblist->window = gtkblist->vbox = gtkblist->treeview = NULL; gtkblist->treemodel = NULL; - gtkblist->idle_column = NULL; - gtkblist->buddy_icon_column = NULL; g_object_unref(G_OBJECT(gtkblist->ift)); g_free(gtkblist); accountmenu = NULL; Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-09-05 16:13:57 UTC (rev 17169) +++ trunk/gtk/gtkblist.h 2006-09-06 00:04:45 UTC (rev 17170) @@ -66,10 +66,7 @@ GtkWidget *treeview; /**< It's a treeview... d'uh. */ GtkTreeStore *treemodel; /**< This is the treemodel. */ - GtkTreeViewColumn *idle_column, - *warning_column, - *buddy_icon_column, - *text_column; + GtkTreeViewColumn *text_column; /**< Column */ GtkCellRenderer *text_rend; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aar...@us...> - 2006-09-06 05:24:18
|
Revision: 17178 http://svn.sourceforge.net/gaim/?rev=17178&view=rev Author: aaronsheldon Date: 2006-09-05 22:24:13 -0700 (Tue, 05 Sep 2006) Log Message: ----------- This commit adds a confirmation dialog to GTKgaim when merging two groups. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkdialogs.c trunk/gtk/gtkdialogs.h Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-09-06 03:58:53 UTC (rev 17177) +++ trunk/gtk/gtkblist.c 2006-09-06 05:24:13 UTC (rev 17178) @@ -317,6 +317,7 @@ GtkTreePath *path; GValue val; GaimBlistNode *node; + GaimGroup *dest; path = gtk_tree_path_new_from_string (arg1); gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); @@ -350,7 +351,11 @@ serv_alias_buddy((GaimBuddy *)node); break; case GAIM_BLIST_GROUP_NODE: - gaim_blist_rename_group((GaimGroup*)node, arg2); + dest = gaim_find_group(arg2); + if (dest != NULL && strcmp(arg2, ((GaimGroup*) node)->name)) { + gaim_gtkdialogs_merge_groups((GaimGroup*) node, arg2); + } else + gaim_blist_rename_group((GaimGroup*)node, arg2); break; case GAIM_BLIST_CHAT_NODE: gaim_blist_alias_chat((GaimChat*)node, arg2); Modified: trunk/gtk/gtkdialogs.c =================================================================== --- trunk/gtk/gtkdialogs.c 2006-09-06 03:58:53 UTC (rev 17177) +++ trunk/gtk/gtkdialogs.c 2006-09-06 05:24:13 UTC (rev 17178) @@ -43,6 +43,11 @@ static GtkWidget *about = NULL; +struct _GaimGroupMergeObject { + GaimGroup* parent; + char *new_name; +}; + struct developer { char *name; char *role; @@ -996,6 +1001,36 @@ } } +void +gaim_gtkdialogs_merge_groups_cb(struct _GaimGroupMergeObject *GGP) +{ + gaim_blist_rename_group(GGP->parent, GGP->new_name); +} + +void +gaim_gtkdialogs_merge_groups(GaimGroup *source, const char *new_name) +{ + gchar *text; + struct _GaimGroupMergeObject *ggp; + + g_return_if_fail(source != NULL); + g_return_if_fail(new_name != NULL); + + text = g_strdup_printf( + "You are about to merge the group called %s into the group " + "called %s. Do you want to continue?", source->name, new_name); + + ggp = g_new(struct _GaimGroupMergeObject, 1); + ggp->parent = source; + ggp->new_name = g_strdup(new_name); + + gaim_request_action(source, NULL, _("Merge Groups"), text, 0, ggp, 2, + _("_Merge Groups"), G_CALLBACK(gaim_gtkdialogs_merge_groups_cb), + _("Cancel"), NULL); + + g_free(text); +} + static void gaim_gtkdialogs_remove_group_cb(GaimGroup *group) { Modified: trunk/gtk/gtkdialogs.h =================================================================== --- trunk/gtk/gtkdialogs.h 2006-09-06 03:58:53 UTC (rev 17177) +++ trunk/gtk/gtkdialogs.h 2006-09-06 05:24:13 UTC (rev 17178) @@ -44,6 +44,7 @@ void gaim_gtkdialogs_remove_group(GaimGroup *); void gaim_gtkdialogs_remove_chat(GaimChat *); void gaim_gtkdialogs_remove_contact(GaimContact *); +void gaim_gtkdialogs_merge_groups(GaimGroup *, const char *); /* Everything after this should probably be moved elsewhere */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-13 22:10:27
|
Revision: 17269 http://svn.sourceforge.net/gaim/?rev=17269&view=rev Author: seanegan Date: 2006-09-13 15:10:19 -0700 (Wed, 13 Sep 2006) Log Message: ----------- Cleanup the spacing down in the statusbox area Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkstatusbox.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-09-13 21:05:29 UTC (rev 17268) +++ trunk/gtk/gtkblist.c 2006-09-13 22:10:19 UTC (rev 17269) @@ -3864,6 +3864,7 @@ GtkTreeViewColumn *column; GtkWidget *menu; GtkWidget *sw; + GtkWidget *sep; GtkAccelGroup *accel_group; GtkTreeSelection *selection; GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, @@ -4042,6 +4043,9 @@ gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview); + sep = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sep, FALSE, FALSE, 0); + /* Create an empty vbox used for showing connection errors */ gtkblist->error_buttons = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->error_buttons, FALSE, FALSE, 0); @@ -4050,6 +4054,7 @@ gtkblist->statusbox = gtk_gaim_status_box_new(); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->statusbox, FALSE, TRUE, 0); gtk_widget_set_name(gtkblist->statusbox, "gaim_gtkblist_statusbox"); + gtk_container_set_border_width(GTK_CONTAINER(gtkblist->statusbox), 3); gtk_widget_show(gtkblist->statusbox); /* set the Show Offline Buddies option. must be done Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-09-13 21:05:29 UTC (rev 17268) +++ trunk/gtk/gtkstatusbox.c 2006-09-13 22:10:19 UTC (rev 17269) @@ -1252,27 +1252,33 @@ GtkRequisition req = {0,0}; GtkAllocation parent_alc, box_alc, icon_alc; GdkPixbuf *scaled; + gint border_width = GTK_CONTAINER (widget)->border_width; combo_box_size_request(widget, &req); box_alc = *allocation; - box_alc.height = MAX(1, (allocation->height - req.height - 6)); - box_alc.y += req.height + 6; + + box_alc.width -= (border_width * 2); + box_alc.height = MAX(1, ((allocation->height - req.height) - (border_width*2))); + box_alc.x += border_width; + box_alc.y += req.height + border_width; gtk_widget_size_allocate((GTK_GAIM_STATUS_BOX(widget))->vbox, &box_alc); parent_alc = *allocation; - parent_alc.height = MAX(1,req.height); - parent_alc.y += 3; + parent_alc.height = MAX(1,req.height - (border_width )); + parent_alc.width -= (border_width * 2); + parent_alc.x += border_width; + parent_alc.y += border_width; if (status_box->icon_box) { - parent_alc.width -= (parent_alc.height + 3); + parent_alc.width -= (parent_alc.height + border_width); icon_alc = *allocation; - icon_alc.height = MAX(1,req.height); + icon_alc.height = MAX(1,req.height) - (border_width); icon_alc.width = icon_alc.height; - icon_alc.x = allocation->width - icon_alc.width; - icon_alc.y += 3; - + icon_alc.x = allocation->width - (icon_alc.width + border_width); + icon_alc.y += border_width; + if (status_box->icon_size != icon_alc.height) { if (status_box->buddy_icon_hover) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-15 22:05:40
|
Revision: 17284 http://svn.sourceforge.net/gaim/?rev=17284&view=rev Author: seanegan Date: 2006-09-15 15:05:34 -0700 (Fri, 15 Sep 2006) Log Message: ----------- GtkCellRendererExpander draws an expander in a renderer to avoid a large, needless margin. The approach is a bit hacky, but it's a good job. - RTL fix in GtkStatusBox - Drag-and-drop image into the global buddy icon selector to set a buddy icon Modified Paths: -------------- trunk/gtk/Makefile.am trunk/gtk/gaimstock.c trunk/gtk/gaimstock.h trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/gtkmain.c trunk/gtk/gtkstatusbox.c trunk/gtk/pixmaps/Makefile.am Added Paths: ----------- trunk/gtk/gtkcellrendererexpander.c trunk/gtk/gtkcellrendererexpander.h Removed Paths: ------------- trunk/gtk/pixmaps/expander-collapsed.png trunk/gtk/pixmaps/expander-expanded.png Modified: trunk/gtk/Makefile.am =================================================================== --- trunk/gtk/Makefile.am 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/Makefile.am 2006-09-15 22:05:34 UTC (rev 17284) @@ -64,6 +64,7 @@ gtkaccount.c \ gtkblist.c \ gtkcelllayout.c \ + gtkcellrendererexpander.c \ gtkcellrendererprogress.c \ gtkcellview.c \ gtkcellviewmenuitem.c \ @@ -102,6 +103,7 @@ gtkaccount.h \ gtkblist.h \ gtkcelllayout.h \ + gtkcellrendererexpander.h \ gtkcellrendererprogress.h \ gtkcellview.h \ gtkcellviewmenuitem.h \ Modified: trunk/gtk/gaimstock.c =================================================================== --- trunk/gtk/gaimstock.c 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/gaimstock.c 2006-09-15 22:05:34 UTC (rev 17284) @@ -130,8 +130,6 @@ { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP }, - { GAIM_STOCK_EXPANDER_EXPANDED,"gaim", "expander-expanded.png" }, - { GAIM_STOCK_EXPANDER_COLLAPSED,"gaim", "expander-collapsed.png" }, }; static const GtkStockItem stock_items[] = Modified: trunk/gtk/gaimstock.h =================================================================== --- trunk/gtk/gaimstock.h 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/gaimstock.h 2006-09-15 22:05:34 UTC (rev 17284) @@ -98,8 +98,6 @@ #define GAIM_STOCK_TYPING "gaim-typing" #define GAIM_STOCK_UPLOAD "gaim-upload" #define GAIM_STOCK_VOICE_CHAT "gaim-voice-chat" -#define GAIM_STOCK_EXPANDER_EXPANDED "gaim-stock-expander-expanded" -#define GAIM_STOCK_EXPANDER_COLLAPSED "gaim-stock-expander-collapsed" /*@}*/ /** Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/gtkblist.c 2006-09-15 22:05:34 UTC (rev 17284) @@ -41,6 +41,7 @@ #include "gtkaccount.h" #include "gtkblist.h" +#include "gtkcellrendererexpander.h" #include "gtkconv.h" #include "gtkdebug.h" #include "gtkdialogs.h" @@ -810,10 +811,10 @@ } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { gtk_blist_join_chat((GaimChat *)node); } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { - if (gtk_tree_view_row_expanded(tv, path)) +/* if (gtk_tree_view_row_expanded(tv, path)) gtk_tree_view_collapse_row(tv, path); else - gtk_tree_view_expand_row(tv,path,FALSE); + gtk_tree_view_expand_row(tv,path,FALSE);*/ } } @@ -3928,10 +3929,18 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS, - GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, - G_TYPE_POINTER, GDK_TYPE_COLOR, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF, - G_TYPE_BOOLEAN); + GDK_TYPE_PIXBUF, /* Status icon */ + G_TYPE_BOOLEAN, /* Status icon visible */ + G_TYPE_STRING, /* Name */ + G_TYPE_STRING, /* Idle */ + G_TYPE_BOOLEAN, /* Idle visible */ + GDK_TYPE_PIXBUF, /* Buddy icon */ + G_TYPE_BOOLEAN, /* Buddy icon visible */ + G_TYPE_POINTER, /* Node */ + GDK_TYPE_COLOR, /* bgcolor */ + G_TYPE_BOOLEAN, /* Group expander */ + G_TYPE_BOOLEAN, /* Contact expander */ + G_TYPE_BOOLEAN); /* Contact expander visible */ gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel)); @@ -3971,17 +3980,17 @@ gtk_tree_view_set_expander_column(GTK_TREE_VIEW(gtkblist->treeview), column); gtkblist->text_column = column = gtk_tree_view_column_new (); - rend = gtk_cell_renderer_pixbuf_new(); + rend = gaim_gtk_cell_renderer_expander_new(); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, - "pixbuf", GROUP_EXPANDER_COLUMN, + "expander-visible", GROUP_EXPANDER_COLUMN, "cell-background-gdk", BGCOLOR_COLUMN, NULL); - rend = gtk_cell_renderer_pixbuf_new(); + rend = gaim_gtk_cell_renderer_expander_new(); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, - "pixbuf", CONTACT_EXPANDER_COLUMN, + "expander-visible", CONTACT_EXPANDER_COLUMN, "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, "cell-background-gdk", BGCOLOR_COLUMN, NULL); @@ -4026,9 +4035,6 @@ NULL); - gtkblist->expander_expanded = gtk_widget_render_icon(gtkblist->treeview, GAIM_STOCK_EXPANDER_EXPANDED, -1, NULL); - gtkblist->expander_collapsed = gtk_widget_render_icon(gtkblist->treeview, GAIM_STOCK_EXPANDER_COLLAPSED, -1, NULL); - g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL); g_signal_connect(G_OBJECT(gtkblist->treeview), "row-expanded", G_CALLBACK(gtk_blist_row_expanded_cb), NULL); g_signal_connect(G_OBJECT(gtkblist->treeview), "row-collapsed", G_CALLBACK(gtk_blist_row_collapsed_cb), NULL); @@ -4412,7 +4418,7 @@ NAME_COLUMN, mark, NODE_COLUMN, gnode, BGCOLOR_COLUMN, &bgcolor, - GROUP_EXPANDER_COLUMN, expanded ? gtkblist->expander_expanded : gtkblist->expander_collapsed, + GROUP_EXPANDER_COLUMN, TRUE, CONTACT_EXPANDER_VISIBLE_COLUMN, FALSE, BUDDY_ICON_VISIBLE_COLUMN, FALSE, IDLE_VISIBLE_COLUMN, FALSE, @@ -4540,7 +4546,7 @@ IDLE_VISIBLE_COLUMN, FALSE, BGCOLOR_COLUMN, NULL, BUDDY_ICON_COLUMN, NULL, - CONTACT_EXPANDER_COLUMN, gtkblist->expander_expanded, + CONTACT_EXPANDER_COLUMN, TRUE, CONTACT_EXPANDER_VISIBLE_COLUMN, TRUE, -1); g_free(mark); Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/gtkblist.h 2006-09-15 22:05:34 UTC (rev 17284) @@ -94,10 +94,6 @@ GaimBlistNode *selected_node; /**< The currently selected node */ GtkWidget *error_buttons; /**< Box containing the connection error buttons */ GtkWidget *statusbox; /**< The status selector dropdown */ - GdkPixbuf *east, *south; /**< Drop shadow stuff */ - GdkWindow *east_shadow, *south_shadow; /**< Drop shadow stuff */ - GdkPixbuf *expander_collapsed; /**< A collapsed expander */ - GdkPixbuf *expander_expanded; /**< An expanded expander */ }; #define GAIM_GTK_BLIST(list) ((GaimGtkBuddyList *)(list)->ui_data) Added: trunk/gtk/gtkcellrendererexpander.c =================================================================== --- trunk/gtk/gtkcellrendererexpander.c (rev 0) +++ trunk/gtk/gtkcellrendererexpander.c 2006-09-15 22:05:34 UTC (rev 17284) @@ -0,0 +1,283 @@ +/* + * @file gtkcellrendererexpander.c GTK+ Cell Renderer Expander + * @ingroup gtkui + * + * 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 + * + */ + +/* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by + * Jonathon Blandford <jr...@re...> for RedHat, Inc. + */ + +#include <gtk/gtktreeview.h> +#include "gtkcellrendererexpander.h" + +static void gaim_gtk_cell_renderer_expander_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); +static void gaim_gtk_cell_renderer_expander_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec); +static void gaim_gtk_cell_renderer_expander_init (GaimGtkCellRendererExpander *cellexpander); +static void gaim_gtk_cell_renderer_expander_class_init (GaimGtkCellRendererExpanderClass *class); +static void gaim_gtk_cell_renderer_expander_get_size (GtkCellRenderer *cell, + GtkWidget *widget, + GdkRectangle *cell_area, + gint *x_offset, + gint *y_offset, + gint *width, + gint *height); +static void gaim_gtk_cell_renderer_expander_render (GtkCellRenderer *cell, + GdkWindow *window, + GtkWidget *widget, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GdkRectangle *expose_area, + guint flags); +static gboolean gaim_gtk_cell_renderer_expander_activate (GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + const gchar *path, + GdkRectangle *background_area, + GdkRectangle *cell_area, + guint flags); +static void gaim_gtk_cell_renderer_expander_finalize (GObject *gobject); + +enum { + LAST_SIGNAL +}; + +enum { + PROP_0, + PROP_IS_EXPANDER +}; + +static gpointer parent_class; +/* static guint expander_cell_renderer_signals [LAST_SIGNAL]; */ + +GType gaim_gtk_cell_renderer_expander_get_type (void) +{ + static GType cell_expander_type = 0; + + if (!cell_expander_type) + { + static const GTypeInfo cell_expander_info = + { + sizeof (GaimGtkCellRendererExpanderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) gaim_gtk_cell_renderer_expander_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GaimGtkCellRendererExpander), + 0, /* n_preallocs */ + (GInstanceInitFunc) gaim_gtk_cell_renderer_expander_init, + NULL /* value_table */ + }; + + cell_expander_type = + g_type_register_static (GTK_TYPE_CELL_RENDERER, + "GaimGtkCellRendererExpander", + &cell_expander_info, 0); + } + + return cell_expander_type; +} + +static void gaim_gtk_cell_renderer_expander_init (GaimGtkCellRendererExpander *cellexpander) +{ + GTK_CELL_RENDERER(cellexpander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE; + GTK_CELL_RENDERER(cellexpander)->xpad = 2; + GTK_CELL_RENDERER(cellexpander)->ypad = 2; +} + +static void gaim_gtk_cell_renderer_expander_class_init (GaimGtkCellRendererExpanderClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS(class); + GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(class); + + parent_class = g_type_class_peek_parent (class); + object_class->finalize = gaim_gtk_cell_renderer_expander_finalize; + + object_class->get_property = gaim_gtk_cell_renderer_expander_get_property; + object_class->set_property = gaim_gtk_cell_renderer_expander_set_property; + + cell_class->get_size = gaim_gtk_cell_renderer_expander_get_size; + cell_class->render = gaim_gtk_cell_renderer_expander_render; + cell_class->activate = gaim_gtk_cell_renderer_expander_activate; + + g_object_class_install_property (object_class, + PROP_IS_EXPANDER, + g_param_spec_boolean ("expander-visible", + "Is Expander", + "True if the renderer should draw an expander", + FALSE, + G_PARAM_READWRITE)); +} + +static void gaim_gtk_cell_renderer_expander_finalize (GObject *object) +{ +/* + GaimGtkCellRendererExpander *cellexpander = GAIM_GTK_CELL_RENDERER_EXPANDER(object); +*/ + + (* G_OBJECT_CLASS (parent_class)->finalize) (object); +} + +static void gaim_gtk_cell_renderer_expander_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *psec) +{ + GaimGtkCellRendererExpander *cellexpander = GAIM_GTK_CELL_RENDERER_EXPANDER(object); + + switch (param_id) + { + case PROP_IS_EXPANDER: + g_value_set_boolean(value, cellexpander->is_expander); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, psec); + break; + + } +} + +static void gaim_gtk_cell_renderer_expander_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + GaimGtkCellRendererExpander *cellexpander = GAIM_GTK_CELL_RENDERER_EXPANDER (object); + + switch (param_id) + { + case PROP_IS_EXPANDER: + cellexpander->is_expander = g_value_get_boolean(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); + break; + } +} + +GtkCellRenderer *gaim_gtk_cell_renderer_expander_new(void) +{ + return g_object_new(GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER, NULL); +} + +static void gaim_gtk_cell_renderer_expander_get_size (GtkCellRenderer *cell, + GtkWidget *widget, + GdkRectangle *cell_area, + gint *x_offset, + gint *y_offset, + gint *width, + gint *height) +{ + gint calc_width; + gint calc_height; + gint expander_size; + + gtk_widget_style_get(widget, "expander-size", &expander_size, NULL); + + calc_width = (gint) cell->xpad * 2 + expander_size; + calc_height = (gint) cell->ypad * 2 + expander_size; + + if (width) + *width = calc_width; + + if (height) + *height = calc_height; + + if (cell_area) + { + if (x_offset) + { + *x_offset = cell->xalign * (cell_area->width - calc_width); + *x_offset = MAX (*x_offset, 0); + } + if (y_offset) + { + *y_offset = cell->yalign * (cell_area->height - calc_height); + *y_offset = MAX (*y_offset, 0); + } + } +} + + +static void gaim_gtk_cell_renderer_expander_render (GtkCellRenderer *cell, + GdkWindow *window, + GtkWidget *widget, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GdkRectangle *expose_area, + guint flags) +{ + GaimGtkCellRendererExpander *cellexpander = (GaimGtkCellRendererExpander *) cell; + + gint width, height; + GtkStateType state; + + if (!cellexpander->is_expander) + return; + + width = cell_area->width; + height = cell_area->height; + + if (!cell->sensitive) + state = GTK_STATE_INSENSITIVE; + else if (flags & GTK_CELL_RENDERER_PRELIT) + state = GTK_STATE_PRELIGHT; + else if (GTK_WIDGET_HAS_FOCUS (widget) && flags & GTK_CELL_RENDERER_SELECTED) + state = GTK_STATE_ACTIVE; + else + state = GTK_STATE_NORMAL; + + width -= cell->xpad*2; + height -= cell->ypad*2; + + gtk_paint_expander (widget->style, + window, state, + NULL, widget, "treeview", + cell_area->x + cell->xpad + (width / 2), + cell_area->y + cell->ypad + (height / 2), + cell->is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED); +} + +static gint gaim_gtk_cell_renderer_expander_activate(GtkCellRenderer *r, + GdkEvent *event, + GtkWidget *widget, + const gchar *p, + GdkRectangle *bg, + GdkRectangle *cell, + GtkCellRendererState flags) +{ + GtkTreePath *path = gtk_tree_path_new_from_string(p); +printf("!! Activated!\n"); + if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(widget), path)) + gtk_tree_view_collapse_row(GTK_TREE_VIEW(widget), path); + else + gtk_tree_view_expand_row(GTK_TREE_VIEW(widget),path,FALSE); + gtk_tree_path_free(path); +} Property changes on: trunk/gtk/gtkcellrendererexpander.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/gtk/gtkcellrendererexpander.h =================================================================== --- trunk/gtk/gtkcellrendererexpander.h (rev 0) +++ trunk/gtk/gtkcellrendererexpander.h 2006-09-15 22:05:34 UTC (rev 17284) @@ -0,0 +1,59 @@ +/* gtkxcellrendererexpander.h + * 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 + * + */ +#ifndef _GAIM_GTKCELLRENDEREREXPANDER_H_ +#define _GAIM_GTKCELLRENDEREREXPANDER_H_ + +#include <gtk/gtkcellrenderer.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#define GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER (gaim_gtk_cell_renderer_expander_get_type()) +#define GAIM_GTK_CELL_RENDERER_EXPANDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER, GaimGtkCellRendererExpander)) +#define GAIM_GTK_CELL_RENDERER_EXPANDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER, GaimGtkCellRendererExpanderClass)) +#define GAIM_IS_GTK_CELL_RENDERER_EXPANDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER)) +#define GAIM_IS_GTK_CELL_RENDERER_EXPANDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER)) +#define GAIM_GTK_CELL_RENDERER_EXPANDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIM_TYPE_GTK_CELL_RENDERER_EXPANDER, GaimGtkCellRendererExpanderClass)) + +typedef struct _GaimGtkCellRendererExpander GaimGtkCellRendererExpander; +typedef struct _GaimGtkCellRendererExpanderClass GaimGtkCellRendererExpanderClass; + +struct _GaimGtkCellRendererExpander { + GtkCellRenderer parent; + + gboolean is_expander; +}; + +struct _GaimGtkCellRendererExpanderClass { + GtkCellRendererClass parent_class; +}; + +GType gaim_gtk_cell_renderer_expander_get_type (void); +GtkCellRenderer *gaim_gtk_cell_renderer_expander_new (void); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _GAIM_GTKCELLRENDEREREXPANDER_H_ */ Property changes on: trunk/gtk/gtkcellrendererexpander.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/gtk/gtkmain.c =================================================================== --- trunk/gtk/gtkmain.c 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/gtkmain.c 2006-09-15 22:05:34 UTC (rev 17284) @@ -796,7 +796,6 @@ #ifdef HAVE_STARTUP_NOTIFICATION startup_notification_complete(); #endif - gtk_main(); #ifdef HAVE_SIGNAL_H Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/gtkstatusbox.c 2006-09-15 22:05:34 UTC (rev 17284) @@ -238,6 +238,36 @@ return FALSE; } +static void +icon_box_dnd_cb(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, + GtkSelectionData *sd, guint info, guint t, GtkGaimStatusBox *box) +{ + gchar *name = (gchar *)sd->data; + + if ((sd->length >= 0) && (sd->format == 8)) { + /* Well, it looks like the drag event was cool. + * Let's do something with it */ + if (!g_ascii_strncasecmp(name, "file://", 7)) { + GError *converr = NULL; + gchar *tmp, *rtmp; + + if(!(tmp = g_filename_from_uri(name, NULL, &converr))) { + gaim_debug(GAIM_DEBUG_ERROR, "buddyicon", "%s\n", + (converr ? converr->message : + "g_filename_from_uri error")); + return; + } + if ((rtmp = strchr(tmp, '\r')) || (rtmp = strchr(tmp, '\n'))) + *rtmp = '\0'; + icon_choose_cb(tmp, box); + g_free(tmp); + } + gtk_drag_finish(dc, TRUE, FALSE, t); + } + gtk_drag_finish(dc, FALSE, FALSE, t); +} + + static gboolean icon_box_enter_cb(GtkWidget *widget, GdkEventCrossing *event, GtkGaimStatusBox *box) { @@ -254,6 +284,13 @@ return FALSE; } + +static const GtkTargetEntry dnd_targets[] = { + {"text/plain", 0, 0}, + {"text/uri-list", 0, 1}, + {"STRING", 0, 2} +}; + static void setup_icon_box(GtkGaimStatusBox *status_box) { @@ -273,9 +310,19 @@ } status_box->icon = gtk_image_new_from_pixbuf(status_box->buddy_icon); status_box->icon_box = gtk_event_box_new(); + status_box->hand_cursor = gdk_cursor_new (GDK_HAND2); status_box->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR); + /* Set up DND */ + gtk_drag_dest_set(status_box->icon_box, + GTK_DEST_DEFAULT_MOTION | + GTK_DEST_DEFAULT_DROP, + dnd_targets, + sizeof(dnd_targets) / sizeof(GtkTargetEntry), + GDK_ACTION_COPY); + + g_signal_connect(G_OBJECT(status_box->icon_box), "drag_data_received", G_CALLBACK(icon_box_dnd_cb), status_box); g_signal_connect(G_OBJECT(status_box->icon_box), "enter-notify-event", G_CALLBACK(icon_box_enter_cb), status_box); g_signal_connect(G_OBJECT(status_box->icon_box), "leave-notify-event", G_CALLBACK(icon_box_leave_cb), status_box); g_signal_connect(G_OBJECT(status_box->icon_box), "button-press-event", G_CALLBACK(icon_box_press_cb), status_box); @@ -1272,11 +1319,17 @@ if (status_box->icon_box) { + GtkTextDirection dir = gtk_widget_get_direction(widget); parent_alc.width -= (parent_alc.height + border_width); icon_alc = *allocation; icon_alc.height = MAX(1,req.height) - (border_width); icon_alc.width = icon_alc.height; - icon_alc.x = allocation->width - (icon_alc.width + border_width); + if (dir == GTK_TEXT_DIR_RTL) { + icon_alc.x = parent_alc.x; + parent_alc.x += icon_alc.width + border_width; + } else { + icon_alc.x = allocation->width - (icon_alc.width + border_width); + } icon_alc.y += border_width; if (status_box->icon_size != icon_alc.height) Modified: trunk/gtk/pixmaps/Makefile.am =================================================================== --- trunk/gtk/pixmaps/Makefile.am 2006-09-15 17:10:37 UTC (rev 17283) +++ trunk/gtk/pixmaps/Makefile.am 2006-09-15 22:05:34 UTC (rev 17284) @@ -8,8 +8,6 @@ change-fgcolor-small.png \ connect.png \ edit.png \ - expander-expanded.png \ - expander-collapsed.png \ gaim.png \ gaim.svg \ gaim_auth.png \ @@ -84,7 +82,7 @@ gaimiconpix_DATA = away.png connect.png msgpend.png offline.png online.png msgunread.png stock_connect_16.png stock_disconnect_16.png gaimdistpixdir = $(datadir)/pixmaps/gaim -gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png expander-expanded.png expander-collapsed.png +gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png distpixmapdir = $(datadir)/pixmaps distpixmap_DATA = gaim.png gaim.svg Deleted: trunk/gtk/pixmaps/expander-collapsed.png =================================================================== (Binary files differ) Deleted: trunk/gtk/pixmaps/expander-expanded.png =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-16 05:38:38
|
Revision: 17287 http://svn.sourceforge.net/gaim/?rev=17287&view=rev Author: sadrul Date: 2006-09-15 22:38:33 -0700 (Fri, 15 Sep 2006) Log Message: ----------- I think this is slightly better. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkcellrendererexpander.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-09-16 03:29:21 UTC (rev 17286) +++ trunk/gtk/gtkblist.c 2006-09-16 05:38:33 UTC (rev 17287) @@ -3984,6 +3984,7 @@ gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "expander-visible", GROUP_EXPANDER_COLUMN, + "sensitive", GROUP_EXPANDER_COLUMN, "cell-background-gdk", BGCOLOR_COLUMN, NULL); @@ -3991,6 +3992,7 @@ gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "expander-visible", CONTACT_EXPANDER_COLUMN, + "sensitive", CONTACT_EXPANDER_COLUMN, "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, "cell-background-gdk", BGCOLOR_COLUMN, NULL); @@ -4528,7 +4530,6 @@ if(gtknode->contact_expanded) { GdkPixbuf *status; char *mark; - char *white; status = gaim_gtk_blist_get_status_icon(cnode, (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") ? Modified: trunk/gtk/gtkcellrendererexpander.c =================================================================== --- trunk/gtk/gtkcellrendererexpander.c 2006-09-16 03:29:21 UTC (rev 17286) +++ trunk/gtk/gtkcellrendererexpander.c 2006-09-16 05:38:33 UTC (rev 17287) @@ -265,7 +265,7 @@ cell->is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED); } -static gint gaim_gtk_cell_renderer_expander_activate(GtkCellRenderer *r, +static gboolean gaim_gtk_cell_renderer_expander_activate(GtkCellRenderer *r, GdkEvent *event, GtkWidget *widget, const gchar *p, @@ -280,4 +280,5 @@ else gtk_tree_view_expand_row(GTK_TREE_VIEW(widget),path,FALSE); gtk_tree_path_free(path); + return FALSE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-09-17 19:25:05
|
Revision: 17295 http://svn.sourceforge.net/gaim/?rev=17295&view=rev Author: datallah Date: 2006-09-17 12:25:00 -0700 (Sun, 17 Sep 2006) Log Message: ----------- Compile fixes Modified Paths: -------------- trunk/gtk/Makefile.mingw trunk/gtk/plugins/perl/common/Makefile.mingw Modified: trunk/gtk/Makefile.mingw =================================================================== --- trunk/gtk/Makefile.mingw 2006-09-17 07:09:54 UTC (rev 17294) +++ trunk/gtk/Makefile.mingw 2006-09-17 19:25:00 UTC (rev 17295) @@ -60,6 +60,7 @@ gtkblist.c \ gtkconn.c \ gtkconv.c \ + gtkcellrendererexpander.c \ gtkcellrendererprogress.c \ gtkdebug.c \ gtkdialogs.c \ Modified: trunk/gtk/plugins/perl/common/Makefile.mingw =================================================================== --- trunk/gtk/plugins/perl/common/Makefile.mingw 2006-09-17 07:09:54 UTC (rev 17294) +++ trunk/gtk/plugins/perl/common/Makefile.mingw 2006-09-17 19:25:00 UTC (rev 17295) @@ -7,7 +7,7 @@ GAIM_TOP := ../../../.. include $(GAIM_TOP)/libgaim/win32/global.mak -TARGET = Gtk +TARGET = GtkUI EXTUTILS := C:/perl/lib/ExtUtils CFLAGS += -Wno-comment @@ -38,7 +38,7 @@ ## SOURCES, OBJECTS ## XS_FILES = \ - Gtk.xs \ + GtkUI.xs \ GtkAccount.xs \ GtkBlist.xs \ GtkConn.xs \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-09-17 23:14:05
|
Revision: 17298 http://svn.sourceforge.net/gaim/?rev=17298&view=rev Author: datallah Date: 2006-09-17 16:13:55 -0700 (Sun, 17 Sep 2006) Log Message: ----------- On win32, ensure that conversation windows are initially put in a sane place (instead of just [0,0]). This can easily be extended to any other problematic windows. I should have done this a long time ago to prevent countless bug reports. Modified Paths: -------------- trunk/gtk/gtkconv.c trunk/gtk/gtkgaim.h trunk/gtk/gtkmain.c trunk/gtk/gtknotify.c trunk/gtk/gtkprefs.c trunk/gtk/win32/gtkwin32dep.c trunk/gtk/win32/gtkwin32dep.h Modified: trunk/gtk/gtkconv.c =================================================================== --- trunk/gtk/gtkconv.c 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/gtkconv.c 2006-09-17 23:13:55 UTC (rev 17298) @@ -5550,7 +5550,6 @@ (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) != NULL)); } - } else { /* Account is offline */ /* Or it's a chat that we've left. */ @@ -7503,6 +7502,11 @@ gtk_widget_show(testidea); +#ifdef _WIN32 + g_signal_connect(G_OBJECT(win->window), "show", + G_CALLBACK(gtkwgaim_ensure_onscreen), win->window); +#endif + return win; } Modified: trunk/gtk/gtkgaim.h =================================================================== --- trunk/gtk/gtkgaim.h 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/gtkgaim.h 2006-09-17 23:13:55 UTC (rev 17298) @@ -32,6 +32,10 @@ #include <gtk/gtk.h> +#ifdef _WIN32 +# include "gtkwin32dep.h" +#endif + /** * Our UI's identifier. */ Modified: trunk/gtk/gtkmain.c =================================================================== --- trunk/gtk/gtkmain.c 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/gtkmain.c 2006-09-17 23:13:55 UTC (rev 17298) @@ -77,12 +77,8 @@ # include <gdk/gdkx.h> #endif -#ifdef _WIN32 -# include "gtkwin32dep.h" -#endif - #ifdef HAVE_STARTUP_NOTIFICATION static SnLauncheeContext *sn_context = NULL; static SnDisplay *sn_display = NULL; @@ -476,17 +472,15 @@ int sig_indx; /* for setting up signal catching */ sigset_t sigset; RETSIGTYPE (*prev_sig_disp)(int); -#endif - int opt; - gboolean gui_check; - gboolean debug_enabled; -#ifdef HAVE_SIGNAL_H char errmsg[BUFSIZ]; #ifndef DEBUG char *segfault_message_tmp; GError *error = NULL; #endif #endif + int opt; + gboolean gui_check; + gboolean debug_enabled; struct option long_options[] = { {"config", required_argument, NULL, 'c'}, Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/gtknotify.c 2006-09-17 23:13:55 UTC (rev 17298) @@ -38,10 +38,6 @@ #include "gtknotify.h" #include "gtkutils.h" -#ifdef _WIN32 -# include "gtkwin32dep.h" -#endif - typedef struct { GaimConnection *gc; Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/gtkprefs.c 2006-09-17 23:13:55 UTC (rev 17298) @@ -50,10 +50,6 @@ #include "gtkutils.h" #include "gaimstock.h" -#ifdef _WIN32 -# include "gtkwin32dep.h" -#endif - #define PROXYHOST 0 #define PROXYPORT 1 #define PROXYUSER 2 @@ -2080,7 +2076,7 @@ /* Convert old queuing prefs to hide_new 3-way pref. */ if (gaim_prefs_exists("/plugins/gtk/docklet/queue_messages") && - gaim_prefs_get_bool("/plugins/gtk/docklet/queue_messages")) + gaim_prefs_get_bool("/plugins/gtk/docklet/queue_messages")) { gaim_prefs_set_string("/gaim/gtk/conversations/im/hide_new", "always"); } Modified: trunk/gtk/win32/gtkwin32dep.c =================================================================== --- trunk/gtk/win32/gtkwin32dep.c 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/win32/gtkwin32dep.c 2006-09-17 23:13:55 UTC (rev 17298) @@ -23,6 +23,9 @@ * */ #define _WIN32_IE 0x500 +#ifndef WINVER +#define WINVER 0x0500 /* W2K */ +#endif #include <windows.h> #include <io.h> #include <stdlib.h> @@ -32,6 +35,7 @@ #include <glib.h> #include <glib/gstdio.h> #include <gtk/gtk.h> +#include <gdk/gdkwin32.h> #include "gaim.h" #include "debug.h" @@ -46,6 +50,8 @@ #include "gtkwin32dep.h" +#include "win32dep.h" + #include "wspell.h" /* @@ -147,7 +153,7 @@ uri, (int) wsinfo.hInstApp); g_free(w_uri); - } else { + } else { SHELLEXECUTEINFOA sinfo; gchar *locale_uri; @@ -248,7 +254,85 @@ } /* DLL initializer */ -BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { gtkgaimdll_hInstance = hinstDLL; return TRUE; } + +typedef HMONITOR WINAPI gaim_MonitorFromWindow(HWND, DWORD); +typedef BOOL WINAPI gaim_GetMonitorInfo(HMONITOR, LPMONITORINFO); + +static gboolean +get_WorkingAreaRectForWindow(HWND hwnd, RECT *workingAreaRc) { + static gaim_MonitorFromWindow *the_MonitorFromWindow; + static gaim_GetMonitorInfo *the_GetMonitorInfo; + static gboolean initialized = FALSE; + + HMONITOR monitor; + MONITORINFO info; + + if(!initialized) { + the_MonitorFromWindow = (gaim_MonitorFromWindow*) + wgaim_find_and_loadproc("user32", "MonitorFromWindow"); + the_GetMonitorInfo = (gaim_GetMonitorInfo*) + wgaim_find_and_loadproc("user32", "GetMonitorInfoA"); + initialized = TRUE; + } + + if(!the_MonitorFromWindow) + return FALSE; + + if(!the_GetMonitorInfo) + return FALSE; + + monitor = the_MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY); + + info.cbSize = sizeof(info); + if(!the_GetMonitorInfo(monitor, &info)) + return FALSE; + + CopyRect(workingAreaRc, &(info.rcWork)); + return TRUE; +} + +void gtkwgaim_ensure_onscreen(GtkWidget *win) { + RECT windowRect, workingAreaRect, intersectionRect; + HWND hwnd = GDK_WINDOW_HWND(win->window); + + g_return_if_fail(hwnd != NULL); + GetWindowRect(hwnd, &windowRect); + + gaim_debug_info("win32placement", + "Window RECT: L:%ld R:%ld T:%ld B:%ld\n", + windowRect.left, windowRect.right, + windowRect.top, windowRect.bottom); + + if(!get_WorkingAreaRectForWindow(hwnd, &workingAreaRect)) { + gaim_debug_info("win32placement", + "Couldn't get multimonitor working area\n"); + if(!SystemParametersInfo(SPI_GETWORKAREA, 0, &workingAreaRect, FALSE)) { + /* I don't think this will ever happen */ + workingAreaRect.left = 0; + workingAreaRect.top = 0; + workingAreaRect.bottom = GetSystemMetrics(SM_CYSCREEN); + workingAreaRect.right = GetSystemMetrics(SM_CXSCREEN); + } + } + + gaim_debug_info("win32placement", + "Working Area RECT: L:%ld R:%ld T:%ld B:%ld\n", + workingAreaRect.left, workingAreaRect.right, + workingAreaRect.top, workingAreaRect.bottom); + + /** If the conversation window doesn't intersect perfectly with the working area, + * move it to the top left corner of the working area */ + if(!(IntersectRect(&intersectionRect, &windowRect, &workingAreaRect) + && EqualRect(&intersectionRect, &windowRect))) { + gaim_debug_info("win32placement", + "conversation window out of working area, relocating\n"); + MoveWindow(hwnd, workingAreaRect.left, workingAreaRect.top, + (windowRect.right - windowRect.left), + (windowRect.bottom - windowRect.top), TRUE); + } +} + Modified: trunk/gtk/win32/gtkwin32dep.h =================================================================== --- trunk/gtk/win32/gtkwin32dep.h 2006-09-17 22:43:01 UTC (rev 17297) +++ trunk/gtk/win32/gtkwin32dep.h 2006-09-17 23:13:55 UTC (rev 17298) @@ -28,6 +28,7 @@ /* Utility */ int gtkwgaim_gz_decompress(const char* in, const char* out); int gtkwgaim_gz_untar(const char* filename, const char* destdir); +void gtkwgaim_ensure_onscreen(GtkWidget *win); /* Misc */ void gtkwgaim_notify_uri(const char *uri); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-18 20:20:38
|
Revision: 17315 http://svn.sourceforge.net/gaim/?rev=17315&view=rev Author: seanegan Date: 2006-09-18 13:20:32 -0700 (Mon, 18 Sep 2006) Log Message: ----------- I like to drag the expander in the chat all the way over so the userlist isn't visible. This saves that preference. Modified Paths: -------------- trunk/gtk/gtkcellrendererexpander.c trunk/gtk/gtkconv.c Modified: trunk/gtk/gtkcellrendererexpander.c =================================================================== --- trunk/gtk/gtkcellrendererexpander.c 2006-09-18 18:23:17 UTC (rev 17314) +++ trunk/gtk/gtkcellrendererexpander.c 2006-09-18 20:20:32 UTC (rev 17315) @@ -108,7 +108,7 @@ static void gaim_gtk_cell_renderer_expander_init (GaimGtkCellRendererExpander *cellexpander) { GTK_CELL_RENDERER(cellexpander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE; - GTK_CELL_RENDERER(cellexpander)->xpad = 2; + GTK_CELL_RENDERER(cellexpander)->xpad = 0; GTK_CELL_RENDERER(cellexpander)->ypad = 2; } Modified: trunk/gtk/gtkconv.c =================================================================== --- trunk/gtk/gtkconv.c 2006-09-18 18:23:17 UTC (rev 17314) +++ trunk/gtk/gtkconv.c 2006-09-18 20:20:32 UTC (rev 17315) @@ -235,6 +235,8 @@ } if (w == gtkconv->entry) gaim_prefs_set_int("/gaim/gtk/conversations/chat/entry_height", allocation->height); + if (w == gtkconv->u.chat->list) + gaim_prefs_set_int("/gaim/gtk/conversations/chat/userlist_width", allocation->width == 1 ? 0 : allocation->width); } return FALSE; @@ -3976,12 +3978,16 @@ "pixbuf", CHAT_USERS_ICON_COLUMN, NULL); gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); + gtk_widget_set_size_request(lbox, + gaim_prefs_get_int("/gaim/gtk/conversations/chat/userlist_width"), -1); g_signal_connect(G_OBJECT(list), "button_press_event", G_CALLBACK(right_click_chat_cb), gtkconv); g_signal_connect(G_OBJECT(list), "popup-menu", G_CALLBACK(gtkconv_chat_popup_menu_cb), gtkconv); - + g_signal_connect(G_OBJECT(list), "size-allocate", G_CALLBACK(size_allocate_cb), gtkconv); + + rend = gtk_cell_renderer_text_new(); g_object_set(rend, @@ -4008,8 +4014,6 @@ gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); - gtk_widget_set_size_request(list, 150, -1); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); gtk_widget_show(list); @@ -6482,7 +6486,7 @@ gaim_prefs_add_int("/gaim/gtk/conversations/chat/default_width", 410); gaim_prefs_add_int("/gaim/gtk/conversations/chat/default_height", 160); gaim_prefs_add_int("/gaim/gtk/conversations/chat/entry_height", 50); - + gaim_prefs_add_int("/gaim/gtk/conversations/chat/userlist_width", 80); /* Conversations -> IM */ gaim_prefs_add_none("/gaim/gtk/conversations/im"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-09-18 21:55:12
|
Revision: 17316 http://svn.sourceforge.net/gaim/?rev=17316&view=rev Author: seanegan Date: 2006-09-18 14:55:06 -0700 (Mon, 18 Sep 2006) Log Message: ----------- Fix the size remembering of the entry imhtml. Also, add functionality such that the buddy icon does not affect the remembered size Modified Paths: -------------- trunk/gtk/gtkcellrendererexpander.c trunk/gtk/gtkconv.c trunk/gtk/gtkconv.h Modified: trunk/gtk/gtkcellrendererexpander.c =================================================================== --- trunk/gtk/gtkcellrendererexpander.c 2006-09-18 20:20:32 UTC (rev 17315) +++ trunk/gtk/gtkcellrendererexpander.c 2006-09-18 21:55:06 UTC (rev 17316) @@ -274,7 +274,6 @@ GtkCellRendererState flags) { GtkTreePath *path = gtk_tree_path_new_from_string(p); -printf("!! Activated!\n"); if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(widget), path)) gtk_tree_view_collapse_row(GTK_TREE_VIEW(widget), path); else Modified: trunk/gtk/gtkconv.c =================================================================== --- trunk/gtk/gtkconv.c 2006-09-18 20:20:32 UTC (rev 17315) +++ trunk/gtk/gtkconv.c 2006-09-18 21:55:06 UTC (rev 17316) @@ -212,6 +212,10 @@ if (!GAIM_IS_GTK_CONVERSATION(conv)) return FALSE; + if (gtkconv->auto_resize) { + return FALSE; + } + /* I find that I resize the window when it has a bunch of conversations in it, mostly so that the * tab bar will fit, but then I don't want new windows taking up the entire screen. I check to see * if there is only one conversation in the window. This way we'll be setting new windows to the @@ -224,7 +228,7 @@ gaim_prefs_set_int("/gaim/gtk/conversations/im/default_width", allocation->width); gaim_prefs_set_int("/gaim/gtk/conversations/im/default_height", allocation->height); } - if (w == gtkconv->entry) + if (w == gtkconv->lower_hbox) gaim_prefs_set_int("/gaim/gtk/conversations/im/entry_height", allocation->height); } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) @@ -233,7 +237,7 @@ gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_width", allocation->width); gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_height", allocation->height); } - if (w == gtkconv->entry) + if (w == gtkconv->lower_hbox) gaim_prefs_set_int("/gaim/gtk/conversations/chat/entry_height", allocation->height); if (w == gtkconv->u.chat->list) gaim_prefs_set_int("/gaim/gtk/conversations/chat/userlist_width", allocation->width == 1 ? 0 : allocation->width); @@ -2259,6 +2263,19 @@ } } +/* This gets added as an idle handler when doing something that + * redraws the icon. It sets the auto_resize gboolean to TRUE. + * This way, when the size_allocate callback gets triggered, it notices + * that this is an autoresize, and after the main loop iterates, it + * gets set back to FALSE + */ +static gboolean reset_auto_resize_cb(gpointer data) +{ + GaimGtkConversation *gtkconv = (GaimGtkConversation *)data; + gtkconv->auto_resize = FALSE; + return FALSE; +} + static gboolean redraw_icon(gpointer data) { @@ -2277,6 +2294,9 @@ if(account && account->gc) prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + gtkconv->auto_resize = TRUE; + g_idle_add(reset_auto_resize_cb, gtkconv); + gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL); buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); @@ -4045,7 +4065,7 @@ gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), gaim_account_get_protocol_name(conv->account)); - gtk_widget_set_size_request(gtkconv->entry, -1, + gtk_widget_set_size_request(gtkconv->lower_hbox, -1, gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height")); gtkconv->entry_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); @@ -4057,7 +4077,7 @@ G_CALLBACK(send_cb), gtkconv); g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", G_CALLBACK(entry_stop_rclick_cb), NULL); - g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", + g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate", G_CALLBACK(size_allocate_cb), gtkconv); default_formatize(gtkconv); @@ -4142,7 +4162,7 @@ gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), gaim_account_get_protocol_name(conv->account)); - gtk_widget_set_size_request(gtkconv->entry, -1, + gtk_widget_set_size_request(gtkconv->lower_hbox, -1, gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height")); gtkconv->entry_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); @@ -4154,7 +4174,7 @@ G_CALLBACK(send_cb), gtkconv); g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", G_CALLBACK(entry_stop_rclick_cb), NULL); - g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", + g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate", G_CALLBACK(size_allocate_cb), gtkconv); g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", @@ -5929,6 +5949,11 @@ gtk_widget_show(event); gtkconv->u.im->icon = gtk_image_new_from_pixbuf(scale); + gtkconv->auto_resize = TRUE; + /* Reset the size request to allow the buddy icon to resize */ + gtk_widget_set_size_request(gtkconv->lower_hbox, -1, -1); + g_idle_add(reset_auto_resize_cb, gtkconv); + printf("Auto resize true\n"); gtk_widget_set_size_request(gtkconv->u.im->icon, scale_width, scale_height); gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon); gtk_widget_show(gtkconv->u.im->icon); Modified: trunk/gtk/gtkconv.h =================================================================== --- trunk/gtk/gtkconv.h 2006-09-18 20:20:32 UTC (rev 17315) +++ trunk/gtk/gtkconv.h 2006-09-18 21:55:06 UTC (rev 17316) @@ -127,7 +127,11 @@ GtkWidget *imhtml; GtkTextBuffer *entry_buffer; GtkWidget *entry; - + gboolean auto_resize; /* this is set to TRUE if the conversation + * is being resized by a non-user-initiated + * event, such as the buddy icon appearing + */ + GtkWidget *close; /* "x" on the tab */ GtkWidget *icon; GtkWidget *tab_label; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-09-20 09:13:23
|
Revision: 17326 http://svn.sourceforge.net/gaim/?rev=17326&view=rev Author: thekingant Date: 2006-09-20 02:13:17 -0700 (Wed, 20 Sep 2006) Log Message: ----------- Show a placeholder icon when there is no global buddy icon selected. Someone more familiar with gtk might want to look over there... Modified Paths: -------------- trunk/gtk/gtkstatusbox.c trunk/gtk/pixmaps/Makefile.am Added Paths: ----------- trunk/gtk/pixmaps/insert-image.png Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-09-19 23:46:17 UTC (rev 17325) +++ trunk/gtk/gtkstatusbox.c 2006-09-20 09:13:17 UTC (rev 17326) @@ -75,6 +75,7 @@ static void gtk_gaim_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gtk_gaim_status_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static gboolean gtk_gaim_status_box_expose_event (GtkWidget *widget, GdkEventExpose *event); +static void gtk_gaim_status_box_redisplay_buddy_icon(GtkGaimStatusBox *status_box); static void gtk_gaim_status_box_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); static void do_colorshift (GdkPixbuf *dest, GdkPixbuf *src, int shift); @@ -308,9 +309,9 @@ { gtk_gaim_status_box_set_buddy_icon(status_box, gaim_prefs_get_string("/gaim/gtk/accounts/buddyicon")); } - status_box->icon = gtk_image_new_from_pixbuf(status_box->buddy_icon); + status_box->icon = gtk_image_new(); status_box->icon_box = gtk_event_box_new(); - + status_box->hand_cursor = gdk_cursor_new (GDK_HAND2); status_box->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR); @@ -321,7 +322,7 @@ dnd_targets, sizeof(dnd_targets) / sizeof(GtkTargetEntry), GDK_ACTION_COPY); - + g_signal_connect(G_OBJECT(status_box->icon_box), "drag_data_received", G_CALLBACK(icon_box_dnd_cb), status_box); g_signal_connect(G_OBJECT(status_box->icon_box), "enter-notify-event", G_CALLBACK(icon_box_enter_cb), status_box); g_signal_connect(G_OBJECT(status_box->icon_box), "leave-notify-event", G_CALLBACK(icon_box_leave_cb), status_box); @@ -1124,6 +1125,8 @@ } } gtk_gaim_status_box_set_buddy_icon(box, filename); + if (box->account == NULL) + gaim_prefs_set_string("/gaim/gtk/accounts/buddyicon", filename); } box->buddy_icon_sel = NULL; @@ -1298,13 +1301,12 @@ GtkGaimStatusBox *status_box = GTK_GAIM_STATUS_BOX(widget); GtkRequisition req = {0,0}; GtkAllocation parent_alc, box_alc, icon_alc; - GdkPixbuf *scaled; gint border_width = GTK_CONTAINER (widget)->border_width; combo_box_size_request(widget, &req); box_alc = *allocation; - + box_alc.width -= (border_width * 2); box_alc.height = MAX(1, ((allocation->height - req.height) - (border_width*2))); box_alc.x += border_width; @@ -1331,27 +1333,11 @@ icon_alc.x = allocation->width - (icon_alc.width + border_width); } icon_alc.y += border_width; - + if (status_box->icon_size != icon_alc.height) { - if (status_box->buddy_icon_hover) - g_object_unref(status_box->buddy_icon_hover); - if ((status_box->buddy_icon_path != NULL) && - (*status_box->buddy_icon_path != '\0')) - { - scaled = gdk_pixbuf_new_from_file_at_scale(status_box->buddy_icon_path, - icon_alc.height, icon_alc.width, FALSE, NULL); - if (scaled != NULL) - { - status_box->buddy_icon_hover = gdk_pixbuf_copy(scaled); - do_colorshift(status_box->buddy_icon_hover, status_box->buddy_icon_hover, 30); - if (status_box->buddy_icon) - g_object_unref(status_box->buddy_icon); - status_box->buddy_icon = scaled; - gtk_image_set_from_pixbuf(GTK_IMAGE(status_box->icon), status_box->buddy_icon); - } - } status_box->icon_size = icon_alc.height; + gtk_gaim_status_box_redisplay_buddy_icon(status_box); } gtk_widget_size_allocate(status_box->icon_box, &icon_alc); } @@ -1497,34 +1483,50 @@ gtk_gaim_status_box_refresh(status_box); } -void -gtk_gaim_status_box_set_buddy_icon(GtkGaimStatusBox *box, const char *filename) +static void +gtk_gaim_status_box_redisplay_buddy_icon(GtkGaimStatusBox *status_box) { - GdkPixbuf *scaled; - g_free(box->buddy_icon_path); - box->buddy_icon_path = g_strdup(filename); - if ((filename != NULL) && (*filename != '\0')) + /* This is sometimes called before the box is shown, and we will not have a size */ + if (status_box->icon_size <= 0) + return; + + if (status_box->buddy_icon) + g_object_unref(status_box->buddy_icon); + if (status_box->buddy_icon_hover) + g_object_unref(status_box->buddy_icon_hover); + status_box->buddy_icon = NULL; + status_box->buddy_icon_hover = NULL; + + if ((status_box->buddy_icon_path != NULL) && + (*status_box->buddy_icon_path != '\0')) + status_box->buddy_icon = gdk_pixbuf_new_from_file_at_scale(status_box->buddy_icon_path, + status_box->icon_size, status_box->icon_size, FALSE, NULL); + + if (status_box->buddy_icon == NULL) { - if (box->buddy_icon != NULL) - g_object_unref(box->buddy_icon); + /* Show a placeholder icon */ + gchar *filename; + filename = g_build_filename(DATADIR, "pixmaps", + "gaim", "insert-image.png", NULL); + status_box->buddy_icon = gdk_pixbuf_new_from_file(filename, NULL); + g_free(filename); + } - /* This will get called before the box is shown and will not have a size */ - if (box->icon_size > 0) { - scaled = gdk_pixbuf_new_from_file_at_scale(filename, - box->icon_size, box->icon_size, FALSE, NULL); - if (scaled != NULL) - { - box->buddy_icon_hover = gdk_pixbuf_copy(scaled); - do_colorshift(box->buddy_icon_hover, box->buddy_icon_hover, 30); - box->buddy_icon = scaled; - gtk_image_set_from_pixbuf(GTK_IMAGE(box->icon), box->buddy_icon); - } - } + if (status_box->buddy_icon != NULL) { + gtk_image_set_from_pixbuf(GTK_IMAGE(status_box->icon), status_box->buddy_icon); + status_box->buddy_icon_hover = gdk_pixbuf_copy(status_box->buddy_icon); + do_colorshift(status_box->buddy_icon_hover, status_box->buddy_icon_hover, 30); } +} - if (box->account == NULL) - gaim_prefs_set_string("/gaim/gtk/accounts/buddyicon", filename); +void +gtk_gaim_status_box_set_buddy_icon(GtkGaimStatusBox *status_box, const char *filename) +{ + g_free(status_box->buddy_icon_path); + status_box->buddy_icon_path = g_strdup(filename); + + gtk_gaim_status_box_redisplay_buddy_icon(status_box); } const char* Modified: trunk/gtk/pixmaps/Makefile.am =================================================================== --- trunk/gtk/pixmaps/Makefile.am 2006-09-19 23:46:17 UTC (rev 17325) +++ trunk/gtk/pixmaps/Makefile.am 2006-09-20 09:13:17 UTC (rev 17326) @@ -17,6 +17,7 @@ gaim_question.png \ gaim_warning.png \ info.png \ + insert-image.png \ insert-image-small.png \ insert-link-small.png \ insert-smiley-small.png \ @@ -82,7 +83,7 @@ gaimiconpix_DATA = away.png connect.png msgpend.png offline.png online.png msgunread.png stock_connect_16.png stock_disconnect_16.png gaimdistpixdir = $(datadir)/pixmaps/gaim -gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png +gaimdistpix_DATA = logo.png tb_drag_arrow_down.xpm tb_drag_arrow_left.xpm tb_drag_arrow_right.xpm tb_drag_arrow_up.xpm typed.png typing.png status-online.png status-offline.png status-away.png status-invisible.png status-typing0.png status-typing1.png status-typing2.png status-typing3.png status-connect0.png status-connect1.png status-connect2.png status-connect3.png phone.png insert-image.png distpixmapdir = $(datadir)/pixmaps distpixmap_DATA = gaim.png gaim.svg Added: trunk/gtk/pixmaps/insert-image.png =================================================================== (Binary files differ) Property changes on: trunk/gtk/pixmaps/insert-image.png ___________________________________________________________________ Name: svn:mime-type + image/png This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |