From: <the...@us...> - 2006-09-24 08:11:32
|
Revision: 17342 http://svn.sourceforge.net/gaim/?rev=17342&view=rev Author: thekingant Date: 2006-09-24 01:11:28 -0700 (Sun, 24 Sep 2006) Log Message: ----------- sf patch #1563203, from hjheins Add Seamonkey to the list of browsers. This is the first patch I've accepted in a while. Mostly because Richard has been doing such an awesome job with the patch tracker. Three cheers for rlaager! hip-hip, hooray! hip-hip, hooray! hip-hip, hooray! Modified Paths: -------------- trunk/gtk/gtknotify.c trunk/gtk/gtkprefs.c Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-09-24 07:14:26 UTC (rev 17341) +++ trunk/gtk/gtknotify.c 2006-09-24 08:11:28 UTC (rev 17342) @@ -966,7 +966,8 @@ } else if (!strcmp(web_browser, "mozilla") || !strcmp(web_browser, "mozilla-firebird") || - !strcmp(web_browser, "firefox")) + !strcmp(web_browser, "firefox") || + !strcmp(web_browser, "seamonkey")) { char *args = ""; Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-09-24 07:14:26 UTC (rev 17341) +++ trunk/gtk/gtkprefs.c 2006-09-24 08:11:28 UTC (rev 17342) @@ -1171,16 +1171,18 @@ char *command; }; + /* Sorted reverse alphabetically */ static struct browser possible_browsers[] = { - {N_("Epiphany"), "epiphany"}, + {N_("Seamonkey"), "seamonkey"}, + {N_("Opera"), "opera"}, + {N_("Netscape"), "netscape"}, + {N_("Mozilla"), "mozilla"}, + {N_("Konqueror"), "kfmclient"}, + {N_("GNOME Default"), "gnome-open"}, + {N_("Galeon"), "galeon"}, + {N_("Firefox"), "firefox"}, {N_("Firebird"), "mozilla-firebird"}, - {N_("Firefox"), "firefox"}, - {N_("Galeon"), "galeon"}, - {N_("GNOME Default"), "gnome-open"}, - {N_("Konqueror"), "kfmclient"}, - {N_("Mozilla"), "mozilla"}, - {N_("Netscape"), "netscape"}, - {N_("Opera"), "opera"} + {N_("Epiphany"), "epiphany"} }; static const int num_possible_browsers = 9; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ev...@us...> - 2006-09-29 00:18:04
|
Revision: 17393 http://svn.sourceforge.net/gaim/?rev=17393&view=rev Author: evands Date: 2006-09-28 17:17:58 -0700 (Thu, 28 Sep 2006) Log Message: ----------- Hide the Browsers preference tab when running in OS X, as is done with gnome, and use its open command which functions as gnome-open does for handling clicked links. Modified Paths: -------------- trunk/gtk/gtknotify.c trunk/gtk/gtkprefs.c Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-09-29 00:17:18 UTC (rev 17392) +++ trunk/gtk/gtknotify.c 2006-09-29 00:17:58 UTC (rev 17393) @@ -942,6 +942,10 @@ { command = g_strdup_printf("gnome-open %s", escaped); } + else if (gaim_running_osx() == TRUE) + { + command = g_strdup_printf("open %s", escaped); + } else if (!strcmp(web_browser, "epiphany") || !strcmp(web_browser, "galeon")) { Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-09-29 00:17:18 UTC (rev 17392) +++ trunk/gtk/gtkprefs.c 2006-09-29 00:17:58 UTC (rev 17393) @@ -1887,8 +1887,8 @@ prefs_notebook_add_page(_("Network"), NULL, network_page(), &p, NULL, notebook_page++); #ifndef _WIN32 /* We use the registered default browser in windows */ - /* if the user is running gnome 2.x, hide the browsers tab */ - if (gaim_running_gnome() == FALSE) { + /* if the user is running gnome 2.x or Mac OS X, hide the browsers tab */ + if ((gaim_running_gnome() == FALSE) && (gaim_running_osx() == FALSE)) { prefs_notebook_add_page(_("Browser"), NULL, browser_page(), &p, NULL, notebook_page++); } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-10-11 04:27:22
|
Revision: 17459 http://svn.sourceforge.net/gaim/?rev=17459&view=rev Author: datallah Date: 2006-10-10 21:27:17 -0700 (Tue, 10 Oct 2006) Log Message: ----------- These apparently crept in accidentally. Removed Paths: ------------- trunk/gtk/docklet-x11.c trunk/gtk/docklet.h Deleted: trunk/gtk/docklet-x11.c =================================================================== --- trunk/gtk/docklet-x11.c 2006-10-11 03:13:33 UTC (rev 17458) +++ trunk/gtk/docklet-x11.c 2006-10-11 04:27:17 UTC (rev 17459) @@ -1,305 +0,0 @@ -/* - * System tray icon (aka docklet) plugin for Gaim - * - * Copyright (C) 2002-3 Robert McQueen <rob...@de...> - * Copyright (C) 2003 Herman Bloggs <her...@ya...> - * Inspired by a similar plugin by: - * John (J5) Palmieri <jo...@ma...> - * - * 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 "debug.h" -#include "gaimstock.h" - -#include "gaim.h" -#include "gtkdialogs.h" - -#include "eggtrayicon.h" -#include "docklet.h" - -#define EMBED_TIMEOUT 5000 - -/* globals */ -static EggTrayIcon *docklet = NULL; -static GtkWidget *image = NULL; -static GtkTooltips *tooltips = NULL; -static GdkPixbuf *blank_icon = NULL; -static int embed_timeout = 0; - -/* protos */ -static void docklet_x11_create(void); - -static gboolean -docklet_x11_create_cb() -{ - docklet_x11_create(); - - return FALSE; /* for when we're called by the glib idle handler */ -} - -static void -docklet_x11_embedded_cb(GtkWidget *widget, void *data) -{ - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "embedded\n"); - - g_source_remove(embed_timeout); - embed_timeout = 0; - docklet_embedded(); -} - -static void -docklet_x11_destroyed_cb(GtkWidget *widget, void *data) -{ - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); - - docklet_remove(); - - g_object_unref(G_OBJECT(docklet)); - docklet = NULL; - - g_idle_add(docklet_x11_create_cb, &handle); -} - -static void -docklet_x11_clicked_cb(GtkWidget *button, GdkEventButton *event, void *data) -{ - if (event->type != GDK_BUTTON_PRESS) - return; - - docklet_clicked(event->button); -} - -static void -docklet_x11_update_icon(DockletStatus icon) -{ - const gchar *icon_name = NULL; - - g_return_if_fail(image != NULL); - - switch (icon) { - case DOCKLET_STATUS_OFFLINE: - icon_name = GAIM_STOCK_ICON_OFFLINE; - break; - case DOCKLET_STATUS_CONNECTING: - icon_name = GAIM_STOCK_ICON_CONNECT; - break; - case DOCKLET_STATUS_ONLINE: - icon_name = GAIM_STOCK_ICON_ONLINE; - break; - case DOCKLET_STATUS_ONLINE_PENDING: - icon_name = GAIM_STOCK_ICON_ONLINE_MSG; - break; - case DOCKLET_STATUS_AWAY: - icon_name = GAIM_STOCK_ICON_AWAY; - break; - case DOCKLET_STATUS_AWAY_PENDING: - icon_name = GAIM_STOCK_ICON_AWAY_MSG; - break; - } - - if(icon_name) - gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); - -#if 0 - GdkPixbuf *p; - GdkBitmap *mask = NULL; - - p = gtk_widget_render_icon(GTK_WIDGET(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); - - if (p && (gdk_pixbuf_get_colorspace(p) == GDK_COLORSPACE_RGB) && (gdk_pixbuf_get_bits_per_sample(p) == 8) - && (gdk_pixbuf_get_has_alpha(p)) && (gdk_pixbuf_get_n_channels(p) == 4)) { - int len = gdk_pixbuf_get_width(p) * gdk_pixbuf_get_height(p); - guchar *data = gdk_pixbuf_get_pixels(p); - guchar *bitmap = g_malloc((len / 8) + 1); - int i; - - for (i = 0; i < len; i++) - if (data[i*4 + 3] > 55) - bitmap[i/8] |= 1 << i % 8; - else - bitmap[i/8] &= ~(1 << i % 8); - - mask = gdk_bitmap_create_from_data(GDK_DRAWABLE(GTK_WIDGET(image)->window), bitmap, gdk_pixbuf_get_width(p), gdk_pixbuf_get_height(p)); - g_free(bitmap); - } - - if (mask) - gdk_window_shape_combine_mask(image->window, mask, 0, 0); - - g_object_unref(G_OBJECT(p)); -#endif -} - -static void -docklet_x11_blank_icon() -{ - if (!blank_icon) { - gint width, height; - - gtk_icon_size_lookup(GTK_ICON_SIZE_LARGE_TOOLBAR, &width, &height); - blank_icon = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, width, height); - gdk_pixbuf_fill(blank_icon, 0); - } - - gtk_image_set_from_pixbuf(GTK_IMAGE(image), blank_icon); -} - -static void -docklet_x11_set_tooltip(gchar *tooltip) -{ - if (!tooltips) - tooltips = gtk_tooltips_new(); - - /* image->parent is a GtkEventBox */ - if (tooltip) { - gtk_tooltips_enable(tooltips); - gtk_tooltips_set_tip(tooltips, image->parent, tooltip, NULL); - } else { - gtk_tooltips_set_tip(tooltips, image->parent, "", NULL); - gtk_tooltips_disable(tooltips); - } -} - -#if GTK_CHECK_VERSION(2,2,0) -static void -docklet_x11_position_menu(GtkMenu *menu, int *x, int *y, gboolean *push_in, - gpointer user_data) -{ - GtkWidget *widget = GTK_WIDGET(docklet); - GtkRequisition req; - gint menu_xpos, menu_ypos; - - gtk_widget_size_request(GTK_WIDGET(menu), &req); - gdk_window_get_origin(widget->window, &menu_xpos, &menu_ypos); - - menu_xpos += widget->allocation.x; - menu_ypos += widget->allocation.y; - - if (menu_ypos > gdk_screen_get_height(gtk_widget_get_screen(widget)) / 2) - menu_ypos -= req.height; - else - menu_ypos += widget->allocation.height; - - *x = menu_xpos; - *y = menu_ypos; - - *push_in = TRUE; -} -#endif - -static void -docklet_x11_destroy() -{ - g_return_if_fail(docklet != NULL); - - docklet_remove(); - - g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_x11_destroyed_cb), NULL); - gtk_widget_destroy(GTK_WIDGET(docklet)); - - g_object_unref(G_OBJECT(docklet)); - docklet = NULL; - - if (blank_icon) - g_object_unref(G_OBJECT(blank_icon)); - blank_icon = NULL; - - image = NULL; - - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); -} - -static gboolean -docklet_x11_embed_timeout_cb() -{ - /* The docklet was not embedded within the timeout. - * Remove it as a visibility manager, but leave the plugin - * loaded so that it can embed automatically if/when a notification - * area becomes available. - */ - gaim_debug_info("tray icon", "failed to embed within timeout\n"); - docklet_remove(); - - return FALSE; -} - -static void -docklet_x11_create() -{ - GtkWidget *box; - - if (docklet) { - /* if this is being called when a tray icon exists, it's because - something messed up. try destroying it before we proceed, - although docklet_refcount may be all hosed. hopefully won't happen. */ - gaim_debug(GAIM_DEBUG_WARNING, "tray icon", "trying to create icon but it already exists?\n"); - docklet_x11_destroy(); - } - - docklet = egg_tray_icon_new("Gaim"); - box = gtk_event_box_new(); - image = gtk_image_new(); - - g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_x11_embedded_cb), NULL); - g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_x11_destroyed_cb), NULL); - g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_x11_clicked_cb), NULL); - - gtk_container_add(GTK_CONTAINER(box), image); - gtk_container_add(GTK_CONTAINER(docklet), box); - - if (!gtk_check_version(2,4,0)) - g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL); - - gtk_widget_show_all(GTK_WIDGET(docklet)); - - /* ref the docklet before we bandy it about the place */ - g_object_ref(G_OBJECT(docklet)); - - /* This is a hack to avoid a race condition between the docklet getting - * embedded in the notification area and the gtkblist restoring its - * previous visibility state. If the docklet does not get embedded within - * the timeout, it will be removed as a visibility manager until it does - * get embedded. Ideally, we would only call docklet_embedded() when the - * icon was actually embedded. - */ - docklet_embedded(); - embed_timeout = g_timeout_add(EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL); - - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "created\n"); -} - -static struct docklet_ui_ops ui_ops = -{ - docklet_x11_create, - docklet_x11_destroy, - docklet_x11_update_icon, - docklet_x11_blank_icon, - docklet_x11_set_tooltip, -#if GTK_CHECK_VERSION(2,2,0) - docklet_x11_position_menu -#else - NULL -#endif -}; - -void -docklet_ui_init() -{ - docklet_set_ui_ops(&ui_ops); -} Deleted: trunk/gtk/docklet.h =================================================================== --- trunk/gtk/docklet.h 2006-10-11 03:13:33 UTC (rev 17458) +++ trunk/gtk/docklet.h 2006-10-11 04:27:17 UTC (rev 17459) @@ -1,61 +0,0 @@ -/* - * System tray icon (aka docklet) plugin for Gaim - * - * Copyright (C) 2002-3 Robert McQueen <rob...@de...> - * Copyright (C) 2003 Herman Bloggs <her...@ya...> - * Inspired by a similar plugin by: - * John (J5) Palmieri <jo...@ma...> - * - * 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 _DOCKLET_H_ -#define _DOCKLET_H_ - -typedef enum -{ - DOCKLET_STATUS_OFFLINE, - DOCKLET_STATUS_ONLINE, - DOCKLET_STATUS_ONLINE_PENDING, - DOCKLET_STATUS_AWAY, - DOCKLET_STATUS_AWAY_PENDING, - DOCKLET_STATUS_CONNECTING -} DockletStatus; - -struct docklet_ui_ops -{ - void (*create)(void); - void (*destroy)(void); - void (*update_icon)(DockletStatus); - void (*blank_icon)(void); - void (*set_tooltip)(gchar *); - GtkMenuPositionFunc position_menu; -}; - -/* useful for setting idle callbacks that will be cleaned up */ -extern GaimPlugin *handle; - -/* functions in docklet.c */ -void docklet_clicked(int); -void docklet_embedded(void); -void docklet_remove(void); -void docklet_set_ui_ops(struct docklet_ui_ops *); -void docklet_unload(void); - -/* function in docklet-{x11,win32}.c */ -void docklet_ui_init(void); - -#endif /* _DOCKLET_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-10-17 19:01:52
|
Revision: 17499 http://svn.sourceforge.net/gaim/?rev=17499&view=rev Author: datallah Date: 2006-10-17 12:01:38 -0700 (Tue, 17 Oct 2006) Log Message: ----------- Attach to the "account-status-changed" signal so that we can notice primitive status changes on the token account. This is based on stuff from Richard Nelson and and rewster. Modified Paths: -------------- trunk/gtk/gtkstatusbox.c trunk/gtk/gtkstatusbox.h Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-10-17 14:30:58 UTC (rev 17498) +++ trunk/gtk/gtkstatusbox.c 2006-10-17 19:01:38 UTC (rev 17499) @@ -71,6 +71,7 @@ static void gtk_gaim_status_box_pulse_typing(GtkGaimStatusBox *status_box); static void gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box); +static void status_menu_refresh_iter(GtkGaimStatusBox *status_box); static void gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box); static void gtk_gaim_status_box_changed(GtkComboBox *box); static void gtk_gaim_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition); @@ -225,6 +226,11 @@ { if (status_box->account == account) update_to_reflect_account_status(status_box, account, newstatus); + else if (status_box->token_status_account == account) + { + gtk_gaim_status_box_refresh(status_box); + status_menu_refresh_iter(status_box); + } } static gboolean @@ -388,17 +394,6 @@ case PROP_ACCOUNT: statusbox->account = g_value_get_pointer(value); - if (statusbox->status_changed_signal) { - gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed", - statusbox, GAIM_CALLBACK(account_status_changed_cb)); - statusbox->status_changed_signal = 0; - } - - if (statusbox->account) { - statusbox->status_changed_signal = gaim_signal_connect(gaim_accounts_get_handle(), "account-status-changed", - statusbox, GAIM_CALLBACK(account_status_changed_cb), - statusbox); - } gtk_gaim_status_box_regenerate(statusbox); break; @@ -413,11 +408,6 @@ { GtkGaimStatusBox *statusbox = GTK_GAIM_STATUS_BOX(obj); - if (statusbox->status_changed_signal) { - gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed", - statusbox, GAIM_CALLBACK(account_status_changed_cb)); - statusbox->status_changed_signal = 0; - } gaim_signals_disconnect_by_handle(statusbox); gaim_prefs_disconnect_by_handle(statusbox); @@ -1359,6 +1349,10 @@ gaim_signal_connect(gaim_accounts_get_handle(), "account-disabled", status_box, GAIM_CALLBACK(account_enabled_cb), status_box); + gaim_signal_connect(gaim_accounts_get_handle(), "account-status-changed", status_box, + GAIM_CALLBACK(account_status_changed_cb), + status_box); + gaim_prefs_connect_callback(status_box, "/gaim/gtk/blist/show_buddy_icons", buddy_list_details_pref_changed_cb, status_box); gaim_prefs_connect_callback(status_box, "/gaim/gtk/conversations/spellcheck", Modified: trunk/gtk/gtkstatusbox.h =================================================================== --- trunk/gtk/gtkstatusbox.h 2006-10-17 14:30:58 UTC (rev 17498) +++ trunk/gtk/gtkstatusbox.h 2006-10-17 19:01:38 UTC (rev 17499) @@ -117,8 +117,6 @@ GtkTreeIter iter; char *error; - gulong status_changed_signal; - /* * These widgets are made for renderin' * That's just what they'll do This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-10-18 03:27:47
|
Revision: 17508 http://svn.sourceforge.net/gaim/?rev=17508&view=rev Author: seanegan Date: 2006-10-17 20:27:43 -0700 (Tue, 17 Oct 2006) Log Message: ----------- docklet conversion fixes from charkins. Thanks Modified Paths: -------------- trunk/gtk/gtkdocklet-x11.c trunk/gtk/gtkdocklet.c trunk/gtk/win32/gtkdocklet-win32.c Modified: trunk/gtk/gtkdocklet-x11.c =================================================================== --- trunk/gtk/gtkdocklet-x11.c 2006-10-18 02:16:50 UTC (rev 17507) +++ trunk/gtk/gtkdocklet-x11.c 2006-10-18 03:27:43 UTC (rev 17508) @@ -56,7 +56,7 @@ static void docklet_x11_embedded_cb(GtkWidget *widget, void *data) { - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "embedded\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "embedded\n"); g_source_remove(embed_timeout); embed_timeout = 0; @@ -66,7 +66,7 @@ static void docklet_x11_destroyed_cb(GtkWidget *widget, void *data) { - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "destroyed\n"); gaim_gtk_docklet_remove(); @@ -222,7 +222,7 @@ image = NULL; - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "destroyed\n"); } static gboolean @@ -233,7 +233,7 @@ * loaded so that it can embed automatically if/when a notification * area becomes available. */ - gaim_debug_info("tray icon", "failed to embed within timeout\n"); + gaim_debug_info("docklet", "failed to embed within timeout\n"); gaim_gtk_docklet_remove(); return FALSE; @@ -248,7 +248,7 @@ /* if this is being called when a tray icon exists, it's because something messed up. try destroying it before we proceed, although docklet_refcount may be all hosed. hopefully won't happen. */ - gaim_debug(GAIM_DEBUG_WARNING, "tray icon", "trying to create icon but it already exists?\n"); + gaim_debug(GAIM_DEBUG_WARNING, "docklet", "trying to create icon but it already exists?\n"); docklet_x11_destroy(); } @@ -281,7 +281,7 @@ gaim_gtk_docklet_embedded(); embed_timeout = g_timeout_add(EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL); - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "created\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "created\n"); } static struct docklet_ui_ops ui_ops = Modified: trunk/gtk/gtkdocklet.c =================================================================== --- trunk/gtk/gtkdocklet.c 2006-10-18 02:16:50 UTC (rev 17507) +++ trunk/gtk/gtkdocklet.c 2006-10-18 03:27:43 UTC (rev 17508) @@ -89,30 +89,16 @@ static GList * get_pending_list(guint max) { - const char *im = gaim_prefs_get_string("/plugins/gtk/docklet/blink_im"); - const char *chat = gaim_prefs_get_string("/plugins/gtk/docklet/blink_chat"); GList *l_im = NULL; GList *l_chat = NULL; - if (im != NULL && strcmp(im, "always") == 0) { - l_im = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, - GAIM_UNSEEN_TEXT, - FALSE, max); - } else if (im != NULL && strcmp(im, "hidden") == 0) { - l_im = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, - GAIM_UNSEEN_TEXT, - TRUE, max); - } + l_im = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, + GAIM_UNSEEN_TEXT, + FALSE, max); - if (chat != NULL && strcmp(chat, "always") == 0) { - l_chat = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_CHAT, - GAIM_UNSEEN_TEXT, - FALSE, max); - } else if (chat != NULL && strcmp(chat, "nick") == 0) { - l_chat = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_CHAT, - GAIM_UNSEEN_NICK, - FALSE, max); - } + l_chat = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_CHAT, + GAIM_UNSEEN_NICK, + FALSE, max); if (l_im != NULL && l_chat != NULL) return g_list_concat(l_im, l_chat); @@ -601,10 +587,6 @@ void *accounts_handle = gaim_accounts_get_handle(); void *docklet_handle = gaim_gtk_docklet_get_handle(); - gaim_prefs_add_none("/plugins/gtk/docklet"); - gaim_prefs_add_string("/plugins/gtk/docklet/blink_im", "hidden"); - gaim_prefs_add_string("/plugins/gtk/docklet/blink_chat", "never"); - docklet_ui_init(); if (ui_ops && ui_ops->create) ui_ops->create(); @@ -627,11 +609,6 @@ docklet_handle, GAIM_CALLBACK(gaim_quit_cb), NULL); #endif -/* gaim_prefs_connect_callback(plugin, "/plugins/gtk/docklet/blink_im", - docklet_prefs_cb, NULL); - gaim_prefs_connect_callback(plugin, "/plugins/gtk/docklet/blink_chat", - docklet_prefs_cb, NULL); -*/ enable_join_chat = online_account_supports_chat(); } @@ -641,40 +618,3 @@ if (ui_ops && ui_ops->destroy) ui_ops->destroy(); } - -#if 0 -static GtkWidget * -plugin_config_frame(GaimPlugin *plugin) -{ - GtkWidget *frame; - GtkWidget *vbox; - GtkSizeGroup *sg; - GtkWidget *dd; - - frame = gtk_vbox_new(FALSE, 18); - gtk_container_set_border_width(GTK_CONTAINER(frame), 12); - - vbox = gaim_gtk_make_frame(frame, _("Blink tray icon for unread...")); - sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - - dd = gaim_gtk_prefs_dropdown(vbox, _("_Instant Messages:"), - GAIM_PREF_STRING, "/plugins/gtk/docklet/blink_im", - _("Never"), "never", - _("In hidden conversations"), "hidden", - _("Always"), "always", - NULL); - gtk_size_group_add_widget(sg, dd); - - dd = gaim_gtk_prefs_dropdown(vbox, _("C_hat Messages:"), - GAIM_PREF_STRING, "/plugins/gtk/docklet/blink_chat", - _("Never"), "never", - _("When my nick is said"), "nick", - _("Always"), "always", - NULL); - gtk_size_group_add_widget(sg, dd); - - gtk_widget_show_all(frame); - return frame; -} -#endif - Modified: trunk/gtk/win32/gtkdocklet-win32.c =================================================================== --- trunk/gtk/win32/gtkdocklet-win32.c 2006-10-18 02:16:50 UTC (rev 17507) +++ trunk/gtk/win32/gtkdocklet-win32.c 2006-10-18 03:27:43 UTC (rev 17508) @@ -58,16 +58,16 @@ switch(msg) { case WM_CREATE: - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "WM_CREATE\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "WM_CREATE\n"); taskbarRestartMsg = RegisterWindowMessage("TaskbarCreated"); break; case WM_TIMER: - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "WM_TIMER\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "WM_TIMER\n"); break; case WM_DESTROY: - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "WM_DESTROY\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "WM_DESTROY\n"); break; case WM_TRAYMESSAGE: @@ -233,7 +233,7 @@ gaim_signal_connect(gaim_gtk_blist_get_handle(), "gtkblist-unhiding", gaim_gtk_docklet_get_handle(), GAIM_CALLBACK(wgaim_tray_maximize), NULL); - gaim_debug(GAIM_DEBUG_INFO, "tray icon", "created\n"); + gaim_debug(GAIM_DEBUG_INFO, "docklet", "created\n"); } static void wgaim_tray_destroy() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-10-23 19:43:52
|
Revision: 17568 http://svn.sourceforge.net/gaim/?rev=17568&view=rev Author: seanegan Date: 2006-10-23 12:43:45 -0700 (Mon, 23 Oct 2006) Log Message: ----------- I'm an idiot. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/gtknotify.c trunk/gtk/gtkstatusbox.c trunk/gtk/gtkstatusbox.h Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-10-23 19:05:14 UTC (rev 17567) +++ trunk/gtk/gtkblist.c 2006-10-23 19:43:45 UTC (rev 17568) @@ -2078,7 +2078,6 @@ GdkPixbuf *status_icon; GdkPixbuf *avatar; int avatar_width; - int avatar_height; int width; int height; }; @@ -2102,7 +2101,6 @@ if(td->avatar) { td->avatar_width = gdk_pixbuf_get_width(td->avatar); - td->avatar_height = gdk_pixbuf_get_height(td->avatar); td->width += td->avatar_width + 8; td->height = MAX(td->height, gdk_pixbuf_get_height(td->avatar) + 8); } @@ -2136,8 +2134,6 @@ { struct tooltip_data *td = l->data; - - #if GTK_CHECK_VERSION(2,2,0) gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, 0, 0, 4, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); @@ -2152,7 +2148,7 @@ max_width - (td->avatar_width + 4), current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); #endif - + gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, NULL, gtkblist->tipwindow, "tooltip", 38 + 4, current_height, td->layout); @@ -3864,10 +3860,6 @@ create_connection_error_buttons, NULL); } -void gaim_gtk_blist_add_alert(GtkWidget *alert) { - gtk_notebook_append_page(gtkblist->alert_notebook, alert, NULL); -} - /******************************************/ /* End of connection error handling stuff */ /******************************************/ @@ -3880,8 +3872,6 @@ GtkWidget *menu; GtkWidget *sw; GtkWidget *sep; - GtkWidget *hbox; - GtkWidget *label, *arrow; GtkAccelGroup *accel_group; GtkTreeSelection *selection; GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, @@ -4086,22 +4076,6 @@ gtkblist->error_buttons = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->error_buttons, FALSE, FALSE, 0); - /* Create an area for showing buddy list alerts */ - hbox = gtk_hbox_new(FALSE,0); - gtk_box_pack_start(GTK_BOX(gtkblist->vbox), hbox, FALSE, FALSE, 0); - arrow = gtk_arrow_new(GTK_ARROW_RIGHT,GTK_SHADOW_NONE); - gtk_box_pack_end(GTK_BOX(hbox),arrow,FALSE,FALSE,0); - label = gtk_label_new(NULL); - gtk_label_set_markup(GTK_LABEL(label), "<span size='smaller'><b>(2/3)</b></span>"); - gtk_box_pack_end(GTK_BOX(hbox),label,FALSE,FALSE,0); - arrow = gtk_arrow_new(GTK_ARROW_LEFT,GTK_SHADOW_NONE); - gtk_box_pack_end(GTK_BOX(hbox),arrow,FALSE,FALSE,0); - - gtkblist->alert_notebook = gtk_notebook_new(); - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkblist->alert_notebook), FALSE); - gtk_notebook_set_show_border(GTK_NOTEBOOK(gtkblist->alert_notebook), FALSE); - gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->alert_notebook, FALSE, FALSE, 0); - /* Add the statusbox */ gtkblist->statusbox = gtk_gaim_status_box_new(); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->statusbox, FALSE, TRUE, 0); Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-10-23 19:05:14 UTC (rev 17567) +++ trunk/gtk/gtkblist.h 2006-10-23 19:43:45 UTC (rev 17568) @@ -94,8 +94,6 @@ GaimBlistNode *selected_node; /**< The currently selected node */ GtkWidget *error_buttons; /**< Box containing the connection error buttons */ GtkWidget *statusbox; /**< The status selector dropdown */ - - GtkWidget *alert_notebook; /**< The notebook for alerts */ }; #define GAIM_GTK_BLIST(list) ((GaimGtkBuddyList *)(list)->ui_data) @@ -303,11 +301,4 @@ */ void gaim_gtk_blist_update_account_error_state(GaimAccount *account, const char *message); -/** - * Adds a widget to the alert area of the buddy list - * - * @param widget The widget to add - */ -void gaim_gtk_blist_add_alert(GtkWidget *alert); - #endif /* _GAIM_GTKBLIST_H_ */ Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-10-23 19:05:14 UTC (rev 17567) +++ trunk/gtk/gtknotify.c 2006-10-23 19:43:45 UTC (rev 17568) @@ -196,138 +196,84 @@ g_list_free(row); } - static void * gaim_gtk_notify_message(GaimNotifyMsgType type, const char *title, - const char *primary, const char *secondary) + const char *primary, const char *secondary) { - GtkStyle *style; - GdkColor color; - GtkWidget *ebox; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *bbox; - GtkWidget *label; - GtkWidget *button; - GtkWidget *alignment; - GtkWidget *img = NULL; - GtkStockItem close_item; - char label_text[2048]; - const char *icon_name = NULL; - char *primary_esc, *secondary_esc; + GtkWidget *dialog; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *img = NULL; + char label_text[2048]; + const char *icon_name = NULL; + char *primary_esc, *secondary_esc; - switch (type) - { - case GAIM_NOTIFY_MSG_ERROR: - icon_name = GAIM_STOCK_DIALOG_ERROR; - break; + switch (type) + { + case GAIM_NOTIFY_MSG_ERROR: + icon_name = GAIM_STOCK_DIALOG_ERROR; + break; - case GAIM_NOTIFY_MSG_WARNING: - icon_name = GAIM_STOCK_DIALOG_WARNING; - break; + case GAIM_NOTIFY_MSG_WARNING: + icon_name = GAIM_STOCK_DIALOG_WARNING; + break; - case GAIM_NOTIFY_MSG_INFO: - icon_name = GAIM_STOCK_DIALOG_INFO; - break; + case GAIM_NOTIFY_MSG_INFO: + icon_name = GAIM_STOCK_DIALOG_INFO; + break; - default: - icon_name = NULL; - break; - } + default: + icon_name = NULL; + break; + } - if (icon_name != NULL) - { - img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_BUTTON); - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); - } + if (icon_name != NULL) + { + img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); + } - ebox = gtk_event_box_new(); - vbox = gtk_vbox_new(FALSE,0); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); - color.red = 65535; - // gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, &(vbox->style->base[GTK_STATE_SELECTED])); - gtk_container_add(GTK_CONTAINER(ebox),vbox); + dialog = gtk_dialog_new_with_buttons(title ? title : GAIM_ALERT_TITLE, + NULL, 0, GTK_STOCK_CLOSE, + GTK_RESPONSE_CLOSE, NULL); - hbox = gtk_hbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(vbox), hbox); + gtk_window_set_role(GTK_WINDOW(dialog), "notify_dialog"); - if (img != NULL) - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - primary_esc = g_markup_escape_text(primary, -1); - if (secondary) - secondary_esc = g_markup_escape_text(secondary, -1); - g_snprintf(label_text, sizeof(label_text), - "<span weight=\"bold\" size=\"smaller\">%s</span>%s<span size=\"smaller\">%s</span>", - primary_esc, - secondary ? "\n" : "", - secondary ? secondary_esc : ""); - g_free(primary_esc); - label = gtk_label_new(NULL); - gtk_widget_modify_text(vbox, GTK_STATE_NORMAL, &(label->style->white)); - gtk_label_set_markup(GTK_LABEL(label), label_text); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); -#if GTK_CHECK_VERSION(2,6,0) - g_object_set(label, "ellipsize", PANGO_ELLIPSIZE_END, NULL); -#endif -#if 0 - if (secondary) { - secondary_esc = g_markup_escape_text(secondary, -1); - g_snprintf(label_text, sizeof(label_text), - "<span size=\"smaller\">%s</span>", - secondary_esc); - g_free(secondary_esc); - label = gtk_label_new(NULL); - gtk_label_set_markup(GTK_LABEL(label), label_text); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); -#if GTK_CHECK_VERSION(2,6,0) - g_object_set(label, "ellipsize", PANGO_ELLIPSIZE_END, NULL); -#endif - } -#endif - bbox = gtk_hbutton_box_new(); - gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + g_signal_connect(G_OBJECT(dialog), "response", + G_CALLBACK(message_response_cb), dialog); - button = gtk_button_new(); - g_signal_connect_swapped(G_OBJECT(button), "activate", gtk_widget_destroy, ebox); - alignment = gtk_alignment_new(0.5, 0.5, 0, 0); - gtk_container_add(GTK_CONTAINER(button), alignment); + gtk_container_set_border_width(GTK_CONTAINER(dialog), GAIM_HIG_BORDER); + gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); + gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), GAIM_HIG_BOX_SPACE); - hbox = gtk_hbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(alignment), hbox); + hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); - img = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); - gtk_misc_set_alignment(GTK_MISC(img), 0.5, 0.5); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + if (img != NULL) + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - gtk_stock_lookup(GTK_STOCK_CLOSE, &close_item); - g_snprintf(label_text, sizeof(label_text), - "<span size=\"smaller\">%s</span>", close_item.label); - label = gtk_label_new(NULL); - gtk_misc_set_alignment(GTK_MISC(img), 0.5, 0.5); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + primary_esc = g_markup_escape_text(primary, -1); + secondary_esc = (secondary != NULL) ? g_markup_escape_text(secondary, -1) : NULL; + g_snprintf(label_text, sizeof(label_text), + "<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s", + primary_esc, (secondary ? secondary_esc : "")); + g_free(primary_esc); + g_free(secondary_esc); - gtk_stock_lookup(GTK_STOCK_CLOSE, &close_item); - g_snprintf(label_text, sizeof(label_text), - "<span size=\"smaller\">%s</span>", close_item.label); - label = gtk_label_new(NULL); - gtk_misc_set_alignment(GTK_MISC(img), 0.5, 0.5); - gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), label_text); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + label = gtk_label_new(NULL); - gtk_container_add(GTK_CONTAINER(bbox), button); + gtk_label_set_markup(GTK_LABEL(label), label_text); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_widget_show_all(ebox); - gaim_gtk_blist_add_alert(ebox); + gtk_widget_show_all(dialog); - return ebox; + return dialog; } - static void selection_changed_cb(GtkTreeSelection *sel, GaimMailDialog *dialog) { Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-10-23 19:05:14 UTC (rev 17567) +++ trunk/gtk/gtkstatusbox.c 2006-10-23 19:43:45 UTC (rev 17568) @@ -83,6 +83,10 @@ static void do_colorshift (GdkPixbuf *dest, GdkPixbuf *src, int shift); static void icon_choose_cb(const char *filename, gpointer data); +static void (*combo_box_size_request)(GtkWidget *widget, GtkRequisition *requisition); +static void (*combo_box_size_allocate)(GtkWidget *widget, GtkAllocation *allocation); +static void (*combo_box_forall) (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); + enum { /** A GtkGaimStatusBoxItemType */ TYPE_COLUMN, @@ -118,7 +122,7 @@ PROP_ICON_SEL, }; -GtkContainer *parent_class = NULL; +GtkComboBoxClass *parent_class = NULL; static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass); static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box); @@ -144,8 +148,8 @@ NULL /* value_table */ }; - status_box_type = g_type_register_static(GTK_TYPE_CONTAINER, - "GtkGaimStatusBox", + status_box_type = g_type_register_static(GTK_TYPE_COMBO_BOX, + "GtkGaimStatusBox", &status_box_info, 0); } @@ -195,7 +199,7 @@ if (status_no != -1) { gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE); -// gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), status_no); + gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), status_no); message = gaim_status_get_attr_string(newstatus, "message"); @@ -422,16 +426,23 @@ gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass) { GObjectClass *object_class; + GtkComboBoxClass *combo_class; GtkWidgetClass *widget_class; GtkContainerClass *container_class = (GtkContainerClass*)klass; parent_class = g_type_class_peek_parent(klass); + combo_class = (GtkComboBoxClass*)klass; + combo_class->changed = gtk_gaim_status_box_changed; + widget_class = (GtkWidgetClass*)klass; + combo_box_size_request = widget_class->size_request; widget_class->size_request = gtk_gaim_status_box_size_request; + combo_box_size_allocate = widget_class->size_allocate; widget_class->size_allocate = gtk_gaim_status_box_size_allocate; widget_class->expose_event = gtk_gaim_status_box_expose_event; + combo_box_forall = container_class->forall; container_class->forall = gtk_gaim_status_box_forall; container_class->remove = NULL; @@ -507,17 +518,16 @@ gpointer data; /* Primary (get the status selected in the dropdown) */ -// gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter); -// gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, -// TYPE_COLUMN, &type, -// DATA_COLUMN, &data, -// -1); -// if (type == GTK_GAIM_STATUS_BOX_TYPE_PRIMITIVE) -// primary = g_strdup(gaim_primitive_get_name_from_type(GPOINTER_TO_INT(data))); -// else -// /* This should never happen, but just in case... */ -// primary = g_strdup("New status"); - primary = g_strdup("Available"); + gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter); + gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, + TYPE_COLUMN, &type, + DATA_COLUMN, &data, + -1); + if (type == GTK_GAIM_STATUS_BOX_TYPE_PRIMITIVE) + primary = g_strdup(gaim_primitive_get_name_from_type(GPOINTER_TO_INT(data))); + else + /* This should never happen, but just in case... */ + primary = g_strdup("New status"); } else if (account_status) primary = g_strdup(gaim_status_get_name(gaim_account_get_active_status(acct))); @@ -617,7 +627,7 @@ /* Make sure to activate the only row in the tree view */ path = gtk_tree_path_new_from_string("0"); -// gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(status_box->cell_view), path); + gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(status_box->cell_view), path); gtk_tree_path_free(path); update_size(status_box); @@ -683,7 +693,7 @@ (!gaim_savedstatus_has_substatuses(saved_status))) { index = get_statusbox_index(status_box, saved_status); -// gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), index); + gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), index); } else { @@ -692,7 +702,7 @@ gpointer data; /* Unset the active item */ -// gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), -1); + gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), -1); /* If this saved status is in the list store, then set it as the active item */ if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(status_box->dropdown_store), &iter)) @@ -720,7 +730,7 @@ || !strcmp(name, acct_status_name)) { /* Found! */ -// gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); g_free(name); break; } @@ -730,7 +740,7 @@ (GPOINTER_TO_INT(data) == gaim_savedstatus_get_creation_time(saved_status))) { /* Found! */ -// gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); break; } } @@ -916,7 +926,7 @@ if (tmp != NULL) g_object_unref(tmp); } -// gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); + gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); } static void @@ -933,7 +943,7 @@ icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); /* Unset the model while clearing it */ -// gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), NULL); + gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), NULL); gtk_list_store_clear(status_box->dropdown_store); /* Don't set the model until the new statuses have been added to the box. * What is presumably a bug in Gtk < 2.4 causes things to get all confused @@ -975,7 +985,7 @@ gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_SAVED, pixbuf, _("Saved..."), NULL, NULL); if (pixbuf) g_object_unref(G_OBJECT(pixbuf)); -// gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); + gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); status_menu_refresh_iter(status_box); } else { @@ -1177,7 +1187,7 @@ static void toggled_cb(GtkWidget *widget, GtkGaimStatusBox *box) { -// gtk_combo_box_popup(GTK_COMBO_BOX(box)); + gtk_combo_box_popup(GTK_COMBO_BOX(box)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE); } @@ -1262,9 +1272,9 @@ status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); status_box->dropdown_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); -// gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); + gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); gtk_cell_view_set_model(GTK_CELL_VIEW(status_box->cell_view), GTK_TREE_MODEL(status_box->store)); -// gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(status_box), 0); + gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(status_box), 0); gtk_list_store_append(status_box->store, &(status_box->iter)); gtk_container_add(GTK_CONTAINER(status_box->toggle_button), status_box->hbox); @@ -1278,20 +1288,20 @@ text_rend = gtk_cell_renderer_text_new(); icon_rend = gtk_cell_renderer_pixbuf_new(); -// gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), icon_rend, FALSE); -// gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), text_rend, TRUE); -// gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), icon_rend, "pixbuf", ICON_COLUMN, NULL); -// gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), text_rend, "markup", TEXT_COLUMN, NULL); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), icon_rend, FALSE); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), text_rend, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), icon_rend, "pixbuf", ICON_COLUMN, NULL); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), text_rend, "markup", TEXT_COLUMN, NULL); #if GTK_CHECK_VERSION(2, 6, 0) g_object_set(text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); #endif status_box->icon_rend = gtk_cell_renderer_pixbuf_new(); status_box->text_rend = gtk_cell_renderer_text_new(); -// gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, FALSE); -// gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, TRUE); -// gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, "pixbuf", ICON_COLUMN, NULL); -// gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, "markup", TEXT_COLUMN, NULL); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, FALSE); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, "pixbuf", ICON_COLUMN, NULL); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, "markup", TEXT_COLUMN, NULL); #if GTK_CHECK_VERSION(2, 6, 0) g_object_set(status_box->text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); #endif @@ -1331,7 +1341,7 @@ G_CALLBACK(imhtml_scroll_event_cb), status_box->imhtml); #if GTK_CHECK_VERSION(2,6,0) -// gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(status_box), dropdown_store_row_separator_func, NULL, NULL); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(status_box), dropdown_store_row_separator_func, NULL, NULL); #endif status_box->token_status_account = check_active_accounts_for_identical_statuses(); @@ -1366,7 +1376,7 @@ GtkRequisition *requisition) { GtkRequisition box_req; - gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->toggle_button, requisition); + combo_box_size_request(widget, requisition); requisition->height += 3; /* If the gtkimhtml is visible, then add some additional padding */ @@ -1428,7 +1438,7 @@ GtkAllocation parent_alc, box_alc, icon_alc; gint border_width = GTK_CONTAINER (widget)->border_width; - gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->toggle_button, &req); + combo_box_size_request(widget, &req); box_alc = *allocation; @@ -1467,6 +1477,7 @@ gtk_widget_size_allocate(status_box->icon_box, &icon_alc); } + combo_box_size_allocate(widget, &parent_alc); gtk_widget_size_allocate(status_box->toggle_button, &parent_alc); widget->allocation = *allocation; } @@ -1500,7 +1511,7 @@ (* callback) (status_box->icon_box, callback_data); } -// combo_box_forall(container, include_internals, callback, callback_data); + combo_box_forall(container, include_internals, callback, callback_data); } GtkWidget * @@ -1713,8 +1724,8 @@ GaimSavedStatus *saved_status = NULL; gboolean changed = TRUE; -// if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) -// return; + if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) + return; gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, TYPE_COLUMN, &type, @@ -1953,8 +1964,8 @@ status_box = GTK_GAIM_STATUS_BOX(box); -// if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) -// return; + if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) + return; gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, TYPE_COLUMN, &type, DATA_COLUMN, &data, Modified: trunk/gtk/gtkstatusbox.h =================================================================== --- trunk/gtk/gtkstatusbox.h 2006-10-23 19:05:14 UTC (rev 17567) +++ trunk/gtk/gtkstatusbox.h 2006-10-23 19:43:45 UTC (rev 17568) @@ -65,7 +65,7 @@ struct _GtkGaimStatusBox { - GtkContainer parent_instance; + GtkComboBox parent_instance; /** * This GtkListStore contains only one row--the currently selected status. @@ -131,7 +131,7 @@ struct _GtkGaimStatusBoxClass { - GtkContainerClass parent_class; + GtkComboBoxClass parent_class; /* signals */ void (* changed) (GtkComboBox *combo_box); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-10-23 20:25:27
|
Revision: 17570 http://svn.sourceforge.net/gaim/?rev=17570&view=rev Author: datallah Date: 2006-10-23 13:25:16 -0700 (Mon, 23 Oct 2006) Log Message: ----------- Add a wingaim only preference to disable the IM conv. flashing. Modified Paths: -------------- trunk/gtk/gtkprefs.c trunk/gtk/win32/gtkwin32dep.c Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-10-23 20:21:54 UTC (rev 17569) +++ trunk/gtk/gtkprefs.c 2006-10-23 20:25:16 UTC (rev 17570) @@ -851,6 +851,10 @@ gaim_gtk_prefs_checkbox(_("Use smooth-scrolling"), "/gaim/gtk/conversations/use_smooth_scrolling", vbox); +#ifdef _WIN32 + gaim_gtk_prefs_checkbox(_("F_lash window when IMs are received"), "/gaim/gtk/win32/blink_im", vbox); +#endif + frame = gaim_gtk_create_imhtml(TRUE, &imhtml, &toolbar, NULL); gtk_widget_set_name(imhtml, "gaim_gtkprefs_font_imhtml"); gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(imhtml), TRUE); Modified: trunk/gtk/win32/gtkwin32dep.c =================================================================== --- trunk/gtk/win32/gtkwin32dep.c 2006-10-23 20:21:54 UTC (rev 17569) +++ trunk/gtk/win32/gtkwin32dep.c 2006-10-23 20:25:16 UTC (rev 17570) @@ -267,7 +267,8 @@ gtkwgaim_conv_im_blink(GaimAccount *account, const char *who, char **message, GaimConversation *conv, GaimMessageFlags flags, void *data) { - gtkwgaim_conv_blink(conv, flags); + if (gaim_prefs_get_bool("/gaim/gtk/win32/blink_im")) + gtkwgaim_conv_blink(conv, flags); return FALSE; } @@ -294,6 +295,9 @@ void gtkwgaim_post_init(void) { + gaim_prefs_add_none("/gaim/gtk/win32"); + gaim_prefs_add_bool("/gaim/gtk/win32/blink_im", TRUE); + gaim_signal_connect(gaim_gtk_conversations_get_handle(), "displaying-im-msg", >kwin32_handle, GAIM_CALLBACK(gtkwgaim_conv_im_blink), NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-01 00:57:46
|
Revision: 17642 http://svn.sourceforge.net/gaim/?rev=17642&view=rev Author: seanegan Date: 2006-10-31 16:57:39 -0800 (Tue, 31 Oct 2006) Log Message: ----------- Show icon pref. No way to change it yet (other than your editor) Modified Paths: -------------- trunk/gtk/gtkdocklet-x11.c trunk/gtk/gtkdocklet.c Modified: trunk/gtk/gtkdocklet-x11.c =================================================================== --- trunk/gtk/gtkdocklet-x11.c 2006-10-31 23:01:39 UTC (rev 17641) +++ trunk/gtk/gtkdocklet-x11.c 2006-11-01 00:57:39 UTC (rev 17642) @@ -208,8 +208,11 @@ { g_return_if_fail(docklet != NULL); + if (embed_timeout) + g_source_remove(embed_timeout); + gaim_gtk_docklet_remove(); - + g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_x11_destroyed_cb), NULL); gtk_widget_destroy(GTK_WIDGET(docklet)); Modified: trunk/gtk/gtkdocklet.c =================================================================== --- trunk/gtk/gtkdocklet.c 2006-10-31 23:01:39 UTC (rev 17641) +++ trunk/gtk/gtkdocklet.c 2006-11-01 00:57:39 UTC (rev 17642) @@ -120,6 +120,18 @@ /* determine if any ims have unseen messages */ convs = get_pending_list(DOCKLET_TOOLTIP_LINE_LIMIT); + if (!strcmp(gaim_prefs_get_string("/gaim/gtk/docklet/show"), "pending")) { + if (convs && ui_ops->create && !visibility_manager) { + ui_ops->create(); + return FALSE; + } else if (!convs && ui_ops->destroy && visibility_manager) { + ui_ops->destroy(); + return FALSE; + } else if (!visibility_manager) { + return FALSE; + } + } + if (convs != NULL) { pending = TRUE; @@ -561,7 +573,8 @@ gaim_gtk_docklet_embedded() { if (!visibility_manager) { - gaim_gtk_blist_visibility_manager_add(); + if (strcmp(gaim_prefs_get_string("/gaim/gtk/docklet/show"),"pending")) + gaim_gtk_blist_visibility_manager_add(); visibility_manager = TRUE; } docklet_update_status(); @@ -574,7 +587,12 @@ { if (visibility_manager) { gaim_gtk_blist_visibility_manager_remove(); + if (docklet_blinking_timer) { + g_source_remove(docklet_blinking_timer); + docklet_blinking_timer = 0; + } visibility_manager = FALSE; + status = DOCKLET_STATUS_OFFLINE; } } @@ -604,8 +622,9 @@ gaim_prefs_add_string("/gaim/gtk/docklet/show", "always"); docklet_ui_init(); - if (ui_ops && ui_ops->create) + if (!strcmp(gaim_prefs_get_string("/gaim/gtk/docklet/show"), "always") && ui_ops && ui_ops->create) ui_ops->create(); + gaim_signal_connect(conn_handle, "signed-on", docklet_handle, GAIM_CALLBACK(docklet_signed_on_cb), NULL); gaim_signal_connect(conn_handle, "signed-off", @@ -631,6 +650,6 @@ void gaim_gtk_docklet_uninit() { - if (ui_ops && ui_ops->destroy) + if (visibility_manager && ui_ops && ui_ops->destroy) ui_ops->destroy(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-01 19:23:59
|
Revision: 17649 http://svn.sourceforge.net/gaim/?rev=17649&view=rev Author: seanegan Date: 2006-11-01 11:23:39 -0800 (Wed, 01 Nov 2006) Log Message: ----------- seanegan: How is "Send unknown "slash" commands as messages" still a pref? Robot101: why was it ever? :P datallah: that should be one of the less contentious things to slash Modified Paths: -------------- trunk/gtk/gtkconv.c trunk/gtk/gtkprefs.c Modified: trunk/gtk/gtkconv.c =================================================================== --- trunk/gtk/gtkconv.c 2006-11-01 07:32:41 UTC (rev 17648) +++ trunk/gtk/gtkconv.c 2006-11-01 19:23:39 UTC (rev 17649) @@ -488,12 +488,6 @@ case GAIM_CMD_STATUS_OK: return TRUE; case GAIM_CMD_STATUS_NOT_FOUND: - if (!gaim_prefs_get_bool("/gaim/gtk/conversations/passthrough_unknown_commands")) { - gaim_conversation_write(conv, "", _("No such command."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - - return TRUE; - } return FALSE; case GAIM_CMD_STATUS_WRONG_ARGS: gaim_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " @@ -6594,7 +6588,6 @@ gaim_prefs_add_bool("/gaim/gtk/conversations/show_timestamps", TRUE); gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", TRUE); - gaim_prefs_add_bool("/gaim/gtk/conversations/passthrough_unknown_commands", FALSE); gaim_prefs_add_string("/gaim/gtk/conversations/placement", "last"); gaim_prefs_add_int("/gaim/gtk/conversations/placement_number", 1); Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-11-01 07:32:41 UTC (rev 17648) +++ trunk/gtk/gtkprefs.c 2006-11-01 19:23:39 UTC (rev 17649) @@ -828,8 +828,6 @@ _("Always"), "always", NULL); - gaim_gtk_prefs_checkbox(_("Send unknown \"_slash\" commands as messages"), - "/gaim/gtk/conversations/passthrough_unknown_commands", vbox); gaim_gtk_prefs_checkbox(_("Show _formatting on incoming messages"), "/gaim/gtk/conversations/show_incoming_formatting", vbox); @@ -2079,6 +2077,7 @@ gaim_prefs_remove("/gaim/gtk/conversations/chat/raise_on_events"); gaim_prefs_remove("/gaim/gtk/conversations/ignore_fonts"); gaim_prefs_remove("/gaim/gtk/conversations/ignore_font_sizes"); + gaim_prefs_remove("/gaim/gtk/conversations/passthrough_unknown_commands"); gaim_prefs_remove("/gaim/gtk/idle"); gaim_prefs_remove("/gaim/gtk/logging/individual_logs"); gaim_prefs_remove("/gaim/gtk/sound/signon"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-02 21:09:25
|
Revision: 17654 http://svn.sourceforge.net/gaim/?rev=17654&view=rev Author: seanegan Date: 2006-11-02 13:09:12 -0800 (Thu, 02 Nov 2006) Log Message: ----------- This seems good. Change prefs dialog around a bit to add docklet pref. beta5 time? Modified Paths: -------------- trunk/gtk/gtkdocklet.c trunk/gtk/gtkprefs.c Modified: trunk/gtk/gtkdocklet.c =================================================================== --- trunk/gtk/gtkdocklet.c 2006-11-02 02:57:25 UTC (rev 17653) +++ trunk/gtk/gtkdocklet.c 2006-11-02 21:09:12 UTC (rev 17654) @@ -127,11 +127,12 @@ } else if (!convs && ui_ops->destroy && visibility_manager) { ui_ops->destroy(); return FALSE; - } else if (!visibility_manager) { - return FALSE; } } + if (!visibility_manager) + return FALSE; + if (convs != NULL) { pending = TRUE; @@ -292,6 +293,23 @@ docklet_update_status(); } +static void +docklet_show_pref_changed_cb(const char *name, GaimPrefType type, + gconstpointer value, gpointer data) +{ + const char *val = value; + if (!strcmp(val, "always")) { + if (!visibility_manager && ui_ops->create) + ui_ops->create(); + } else if (!strcmp(val, "never")) { + if (visibility_manager && ui_ops->destroy) + ui_ops->destroy(); + } else { + docklet_update_status(); + } + +} + /************************************************************************** * docklet pop-up menu **************************************************************************/ @@ -620,6 +638,8 @@ gaim_prefs_add_none("/gaim/gtk/docklet"); gaim_prefs_add_bool("/gaim/gtk/docklet/blink", FALSE); gaim_prefs_add_string("/gaim/gtk/docklet/show", "always"); + gaim_prefs_connect_callback(docklet_handle, "/gaim/gtk/docklet/show", + docklet_show_pref_changed_cb, NULL); docklet_ui_init(); if (!strcmp(gaim_prefs_get_string("/gaim/gtk/docklet/show"), "always") && ui_ops && ui_ops->create) Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-11-02 02:57:25 UTC (rev 17653) +++ trunk/gtk/gtkprefs.c 2006-11-02 21:09:12 UTC (rev 17654) @@ -70,9 +70,6 @@ /* * PROTOTYPES */ -static int prefs_notebook_add_page(const char*, GdkPixbuf*, - GtkWidget*, GtkTreeIter*, - GtkTreeIter*, int); static void delete_prefs(GtkWidget *, void *); static void @@ -802,19 +799,85 @@ } static GtkWidget * -conv_page() +interface_page() { GtkWidget *ret; GtkWidget *vbox; + GtkWidget *vbox2; GtkWidget *label; GList *names = NULL; - GtkWidget *frame; - GtkWidget *imhtml; + + ret = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); + gtk_container_set_border_width(GTK_CONTAINER(ret), GAIM_HIG_BORDER); + + vbox = gaim_gtk_make_frame(ret, _("System Tray Icon")); + label = gaim_gtk_prefs_dropdown(vbox, _("_Show System Tray Icon:"), GAIM_PREF_STRING, + "/gaim/gtk/docklet/show", + _("Always"), "always", + _("Never"), "never", + _("On unread messages"), "pending", + NULL); + + vbox = gaim_gtk_make_frame(ret, _("Conversation Window Hiding")); + gaim_gtk_prefs_dropdown(vbox, _("_Hide new IM conversations"), + GAIM_PREF_STRING, "/gaim/gtk/conversations/im/hide_new", + _("Never"), "never", + _("When away"), "away", + _("Always"), "always", + NULL); + + + /* All the tab options! */ + vbox = gaim_gtk_make_frame(ret, _("Tab Options")); + + gaim_gtk_prefs_checkbox(_("Show IMs and chats in _tabbed windows"), + "/gaim/gtk/conversations/tabs", vbox); + + /* + * Connect a signal to the above preference. When conversations are not + * shown in a tabbed window then all tabbing options should be disabled. + */ + vbox2 = gtk_vbox_new(FALSE, 9); + gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0); + gaim_prefs_connect_callback(prefs, "/gaim/gtk/conversations/tabs", + conversation_usetabs_cb, vbox2); + if (!gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")) + gtk_widget_set_sensitive(vbox2, FALSE); + + gaim_gtk_prefs_checkbox(_("Show close b_utton on tabs"), + "/gaim/gtk/conversations/close_on_tabs", vbox2); + + label = gaim_gtk_prefs_dropdown(vbox2, _("_Placement:"), GAIM_PREF_INT, + "/gaim/gtk/conversations/tab_side", + _("Top"), GTK_POS_TOP, + _("Bottom"), GTK_POS_BOTTOM, + _("Left"), GTK_POS_LEFT, + _("Right"), GTK_POS_RIGHT, +#if GTK_CHECK_VERSION(2,6,0) + _("Left Vertical"), GTK_POS_LEFT|8, + _("Right Vertical"), GTK_POS_RIGHT|8, +#endif + NULL); + + names = gaim_gtkconv_placement_get_options(); + label = gaim_gtk_prefs_dropdown_from_list(vbox2, _("N_ew conversations:"), + GAIM_PREF_STRING, "/gaim/gtk/conversations/placement", names); + g_list_free(names); + + gtk_widget_show_all(ret); + return ret; +} + +static GtkWidget * +conv_page() +{ + GtkWidget *ret; + GtkWidget *vbox; GtkWidget *toolbar; - GtkWidget *hbox; - GtkWidget *vbox2; GtkWidget *iconpref1; GtkWidget *iconpref2; + GtkWidget *imhtml; + GtkWidget *frame; ret = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); gtk_container_set_border_width(GTK_CONTAINER(ret), GAIM_HIG_BORDER); @@ -888,46 +951,7 @@ g_signal_connect_after(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(formatting_clear_cb), NULL); - /* All the tab options! */ - vbox = gaim_gtk_make_frame(ret, _("Tab Options")); - gaim_gtk_prefs_checkbox(_("Show IMs and chats in _tabbed windows"), - "/gaim/gtk/conversations/tabs", vbox); - - /* - * Connect a signal to the above preference. When conversations are not - * shown in a tabbed window then all tabbing options should be disabled. - */ - vbox2 = gtk_vbox_new(FALSE, 9); - gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0); - gaim_prefs_connect_callback(prefs, "/gaim/gtk/conversations/tabs", - conversation_usetabs_cb, vbox2); - if (!gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")) - gtk_widget_set_sensitive(vbox2, FALSE); - - gaim_gtk_prefs_checkbox(_("Show close b_utton on tabs"), - "/gaim/gtk/conversations/close_on_tabs", vbox2); - - hbox = gtk_hbox_new(FALSE, 9); - gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); - - label = gaim_gtk_prefs_dropdown(hbox, _("_Placement:"), GAIM_PREF_INT, - "/gaim/gtk/conversations/tab_side", - _("Top"), GTK_POS_TOP, - _("Bottom"), GTK_POS_BOTTOM, - _("Left"), GTK_POS_LEFT, - _("Right"), GTK_POS_RIGHT, -#if GTK_CHECK_VERSION(2,6,0) - _("Left Vertical"), GTK_POS_LEFT|8, - _("Right Vertical"), GTK_POS_RIGHT|8, -#endif - NULL); - - names = gaim_gtkconv_placement_get_options(); - label = gaim_gtk_prefs_dropdown_from_list(hbox, _("N_ew conversations:"), - GAIM_PREF_STRING, "/gaim/gtk/conversations/placement", names); - g_list_free(names); - gtk_widget_show_all(ret); return ret; @@ -1861,22 +1885,11 @@ return ret; } -int prefs_notebook_add_page(const char *text, - GdkPixbuf *pixbuf, - GtkWidget *page, - GtkTreeIter *iter, - GtkTreeIter *parent, - int ind) { - GdkPixbuf *icon = NULL; +static int +prefs_notebook_add_page(const char *text, + GtkWidget *page, + int ind) { - if (pixbuf) - icon = gdk_pixbuf_scale_simple (pixbuf, 18, 18, GDK_INTERP_BILINEAR); - - if (pixbuf) - g_object_unref(pixbuf); - if (icon) - g_object_unref(icon); - #if GTK_CHECK_VERSION(2,4,0) return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text)); #else @@ -1886,20 +1899,20 @@ } static void prefs_notebook_init() { - GtkTreeIter p, c, c2; - prefs_notebook_add_page(_("Conversations"), NULL, conv_page(), &c, &p, notebook_page++); - prefs_notebook_add_page(_("Smiley Themes"), NULL, theme_page(), &c2, &c, notebook_page++); - prefs_notebook_add_page(_("Sounds"), NULL, sound_page(), &c, &p, notebook_page++); - prefs_notebook_add_page(_("Network"), NULL, network_page(), &p, NULL, notebook_page++); + prefs_notebook_add_page(_("Interface"), interface_page(), notebook_page++); + prefs_notebook_add_page(_("Conversations"), conv_page(), notebook_page++); + prefs_notebook_add_page(_("Smiley Themes"), theme_page(), notebook_page++); + prefs_notebook_add_page(_("Sounds"), sound_page(), notebook_page++); + prefs_notebook_add_page(_("Network"), network_page(), notebook_page++); #ifndef _WIN32 /* We use the registered default browser in windows */ /* if the user is running gnome 2.x or Mac OS X, hide the browsers tab */ if ((gaim_running_gnome() == FALSE) && (gaim_running_osx() == FALSE)) { - prefs_notebook_add_page(_("Browser"), NULL, browser_page(), &p, NULL, notebook_page++); + prefs_notebook_add_page(_("Browser"), browser_page(), notebook_page++); } #endif - prefs_notebook_add_page(_("Logging"), NULL, logging_page(), &p, NULL, notebook_page++); - prefs_notebook_add_page(_("Status / Idle"), NULL, away_page(), &p, NULL, notebook_page++); + prefs_notebook_add_page(_("Logging"), logging_page(), notebook_page++); + prefs_notebook_add_page(_("Status / Idle"), away_page(), notebook_page++); } void gaim_gtk_prefs_show(void) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-11-06 07:38:26
|
Revision: 17682 http://svn.sourceforge.net/gaim/?rev=17682&view=rev Author: thekingant Date: 2006-11-05 23:38:05 -0800 (Sun, 05 Nov 2006) Log Message: ----------- sf patch #1591071, from Ari Pollak "This patch disables the seemingly obsolete NAS and arts sound options since they're not provided in gstreamer 0.10. It also falls back more gracefully if we can't get a proper GStreamer audiosink." We're currently only using gconfaudiosink if the user is running within Gnome. Do we want to keep doing that? Modified Paths: -------------- trunk/gtk/gtkprefs.c trunk/gtk/gtksound.c Modified: trunk/gtk/gtkprefs.c =================================================================== --- trunk/gtk/gtkprefs.c 2006-11-06 07:25:05 UTC (rev 17681) +++ trunk/gtk/gtkprefs.c 2006-11-06 07:38:05 UTC (rev 17682) @@ -1403,10 +1403,8 @@ const char *method = value; gtk_widget_set_sensitive(hbox, - !strcmp(method, "automatic") || - !strcmp(method, "arts") || - !strcmp(method, "esd") || - !strcmp(method, "nas")); + !strcmp(method, "automatic") || + !strcmp(method, "esd")); } #endif /* USE_GSTREAMER */ #endif /* !_WIN32 */ @@ -1595,9 +1593,7 @@ _("Console beep"), "beep", #ifdef USE_GSTREAMER _("Automatic"), "automatic", - "Arts", "arts", "ESD", "esd", - "NAS", "nas", #endif _("Command"), "custom", _("No sounds"), "none", Modified: trunk/gtk/gtksound.c =================================================================== --- trunk/gtk/gtksound.c 2006-11-06 07:25:05 UTC (rev 17681) +++ trunk/gtk/gtksound.c 2006-11-06 07:38:05 UTC (rev 17682) @@ -451,12 +451,10 @@ if (gaim_running_gnome()) { sink = gst_element_factory_make("gconfaudiosink", "sink"); } + if (!sink) + sink = gst_element_factory_make("autoaudiosink", "sink"); } else if (!strcmp(method, "esd")) { sink = gst_element_factory_make("esdsink", "sink"); - } else if (!strcmp(method, "arts")) { - sink = gst_element_factory_make("artssink", "sink"); - } else if (!strcmp(method, "nas")) { - sink = gst_element_factory_make("nassink", "sink"); } uri = g_strdup_printf("file://%s", filename); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-11-18 05:30:58
|
Revision: 17774 http://svn.sourceforge.net/gaim/?rev=17774&view=rev Author: sadrul Date: 2006-11-17 21:30:57 -0800 (Fri, 17 Nov 2006) Log Message: ----------- The data for "plugin_action" is set with a destructor function. So freeing it twice would cause a crash. The reason it's not crashing is, the children of the container are not the menuitems, but GtkAccelLabel (or some such thing). So all we are doing is freeing null. Also, when the menu is destroyed, all the menuitems are also destroyed anyway. So get rid of the unrequired loop. Also, isdigit expects a character, not a string. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkmain.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-11-18 05:25:31 UTC (rev 17773) +++ trunk/gtk/gtkblist.c 2006-11-18 05:30:57 UTC (rev 17774) @@ -6115,20 +6115,7 @@ /* Remove old plugin action submenus from the Tools menu */ for (l = plugin_submenus; l; l = l->next) - { - GList *menuitems; - - submenu = l->data; - - while ((menuitems = gtk_container_get_children(GTK_CONTAINER(submenu))) != NULL) - { - menuitem = menuitems->data; - g_free(g_object_get_data(G_OBJECT(menuitem), "plugin_action")); - gtk_widget_destroy(menuitem); - } - - gtk_widget_destroy(GTK_WIDGET(submenu)); - } + gtk_widget_destroy(GTK_WIDGET(l->data)); g_list_free(plugin_submenus); plugin_submenus = NULL; Modified: trunk/gtk/gtkmain.c =================================================================== --- trunk/gtk/gtkmain.c 2006-11-18 05:25:31 UTC (rev 17773) +++ trunk/gtk/gtkmain.c 2006-11-18 05:30:57 UTC (rev 17774) @@ -735,7 +735,7 @@ for (accounts = gaim_accounts_get_all(); accounts != NULL; accounts = accounts->next) { GaimAccount *account = accounts->data; if (!strcmp(gaim_account_get_protocol_id(account), "prpl-oscar")) { - if (isdigit(gaim_account_get_username(account))) + if (isdigit(*gaim_account_get_username(account))) gaim_account_set_protocol_id(account, "prpl-icq"); else gaim_account_set_protocol_id(account, "prpl-aim"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rl...@us...> - 2006-11-18 05:53:07
|
Revision: 17775 http://svn.sourceforge.net/gaim/?rev=17775&view=rev Author: rlaager Date: 2006-11-17 21:53:07 -0800 (Fri, 17 Nov 2006) Log Message: ----------- SF Patch #1597292 from Eduardo P?\195?\169rez This allows you to use the buddy pounce editor when you're offline. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkpounce.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-11-18 05:30:57 UTC (rev 17774) +++ trunk/gtk/gtkblist.c 2006-11-18 05:53:07 UTC (rev 17775) @@ -3394,7 +3394,7 @@ gtk_widget_set_sensitive(widget, gaim_gtk_blist_joinchat_is_showable()); widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Buddy Pounces")); - gtk_widget_set_sensitive(widget, (gaim_connections_get_all() != NULL)); + gtk_widget_set_sensitive(widget, (gaim_accounts_get_all() != NULL)); widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy")); gtk_widget_set_sensitive(widget, (gaim_connections_get_all() != NULL)); Modified: trunk/gtk/gtkpounce.c =================================================================== --- trunk/gtk/gtkpounce.c 2006-11-18 05:30:57 UTC (rev 17774) +++ trunk/gtk/gtkpounce.c 2006-11-18 05:53:07 UTC (rev 17775) @@ -182,9 +182,6 @@ account = gaim_pounce_get_pouncer(pounce); - if (gaim_account_is_disconnected(account)) - return; - events = gaim_pounce_get_events(pounce); pixbuf = gaim_gtk_create_prpl_icon(account, 0.5); @@ -462,8 +459,9 @@ GPtrArray *sound_widgets; GPtrArray *exec_widgets; - g_return_if_fail((cur_pounce != NULL) || (account != NULL) || - (gaim_connections_get_all() != NULL)); + g_return_if_fail((cur_pounce != NULL) || + (account != NULL) || + (gaim_accounts_get_all() != NULL)); dialog = g_new0(GaimGtkPounceDialog, 1); @@ -479,12 +477,18 @@ } else { + GList *connections = gaim_connections_get_all(); GaimConnection *gc; - gc = (GaimConnection *)gaim_connections_get_all()->data; + if (connections != NULL) + { + gc = (GaimConnection *)connections->data; + dialog->account = gaim_connection_get_account(gc); + } + else + dialog->account = gaim_accounts_get_all()->data; dialog->pounce = NULL; - dialog->account = gaim_connection_get_account(gc); } sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); @@ -527,7 +531,7 @@ gtk_size_group_add_widget(sg, label); dialog->account_menu = - gaim_gtk_account_option_menu_new(dialog->account, FALSE, + gaim_gtk_account_option_menu_new(dialog->account, TRUE, G_CALLBACK(pounce_choose_cb), NULL, dialog); @@ -1339,7 +1343,7 @@ /* Add button */ button = gtk_button_new_from_stock(GTK_STOCK_ADD); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_set_sensitive(button, (gaim_connections_get_all() != NULL)); + gtk_widget_set_sensitive(button, (gaim_accounts_get_all() != NULL)); gaim_signal_connect(gaim_connections_get_handle(), "signed-on", pounces_manager, GAIM_CALLBACK(pounces_manager_connection_cb), button); gaim_signal_connect(gaim_connections_get_handle(), "signed-off", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-11-21 04:34:40
|
Revision: 17799 http://svn.sourceforge.net/gaim/?rev=17799&view=rev Author: datallah Date: 2006-11-20 20:34:38 -0800 (Mon, 20 Nov 2006) Log Message: ----------- The global buddy icon is now removable (via a right-click popup menu). Modified Paths: -------------- trunk/gtk/gtkstatusbox.c trunk/gtk/gtkstatusbox.h Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-11-21 02:27:31 UTC (rev 17798) +++ trunk/gtk/gtkstatusbox.c 2006-11-21 04:34:38 UTC (rev 17799) @@ -230,16 +230,45 @@ status_menu_refresh_iter(status_box); } +static void +remove_buddy_icon_cb(GtkWidget *w, GtkGaimStatusBox *box) +{ + /* The pref-connect callback does the actual work */ + gaim_prefs_set_string("/gaim/gtk/accounts/buddyicon", NULL); + + gtk_widget_destroy(box->icon_box_menu); + box->icon_box_menu = NULL; +} + static gboolean icon_box_press_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box) { - if (box->buddy_icon_sel) { - gtk_window_present(GTK_WINDOW(box->buddy_icon_sel)); - return FALSE; + if (event->button == 3) { + GtkWidget *menu_item; + + if (box->icon_box_menu) + gtk_widget_destroy(box->icon_box_menu); + + box->icon_box_menu = gtk_menu_new(); + + menu_item = gaim_new_item_from_stock(box->icon_box_menu, _("Remove"), GTK_STOCK_REMOVE, + G_CALLBACK(remove_buddy_icon_cb), + box, 0, 0, NULL); + if (gaim_prefs_get_string("/gaim/gtk/accounts/buddyicon") == NULL) + gtk_widget_set_sensitive(menu_item, FALSE); + + gtk_menu_popup(GTK_MENU(box->icon_box_menu), NULL, NULL, NULL, NULL, + event->button, event->time); + + } else { + if (box->buddy_icon_sel) { + gtk_window_present(GTK_WINDOW(box->buddy_icon_sel)); + return FALSE; + } + + box->buddy_icon_sel = gaim_gtk_buddy_icon_chooser_new(NULL, icon_choose_cb, box); + gtk_widget_show_all(box->buddy_icon_sel); } - - box->buddy_icon_sel = gaim_gtk_buddy_icon_chooser_new(NULL, icon_choose_cb, box); - gtk_widget_show_all(box->buddy_icon_sel); return FALSE; } @@ -354,10 +383,14 @@ if (statusbox->buddy_icon_sel) gtk_widget_destroy(statusbox->buddy_icon_sel); + if (statusbox->icon_box_menu) + gtk_widget_destroy(statusbox->icon_box_menu); + g_free(statusbox->buddy_icon_path); statusbox->icon = NULL; statusbox->icon_box = NULL; + statusbox->icon_box_menu = NULL; statusbox->buddy_icon_path = NULL; statusbox->buddy_icon = NULL; statusbox->buddy_icon_hover = NULL; @@ -1198,50 +1231,53 @@ box = data; - if (filename) { + if (box->account) { + GaimPlugin *plug = gaim_find_prpl(gaim_account_get_protocol_id(box->account)); + if (plug) { + GaimPluginProtocolInfo *prplinfo = GAIM_PLUGIN_PROTOCOL_INFO(plug); + if (prplinfo && prplinfo->icon_spec.format) { + char *icon = NULL; + if (filename) + icon = gaim_gtk_convert_buddy_icon(plug, filename); + gaim_account_set_ui_bool(box->account, GAIM_GTK_UI, "use-global-buddyicon", (filename != NULL)); + gaim_account_set_ui_string(box->account, GAIM_GTK_UI, "non-global-buddyicon", icon); + gaim_account_set_buddy_icon(box->account, icon); + g_free(icon); + } + } + } else { GList *accounts; - - if (box->account) { - GaimPlugin *plug = gaim_find_prpl(gaim_account_get_protocol_id(box->account)); + for (accounts = gaim_accounts_get_all(); accounts != NULL; accounts = accounts->next) { + GaimAccount *account = accounts->data; + GaimPlugin *plug = gaim_find_prpl(gaim_account_get_protocol_id(account)); if (plug) { GaimPluginProtocolInfo *prplinfo = GAIM_PLUGIN_PROTOCOL_INFO(plug); - if (prplinfo && prplinfo->icon_spec.format) { - char *icon = gaim_gtk_convert_buddy_icon(plug, filename); - gaim_account_set_buddy_icon(box->account, 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); + if (prplinfo != NULL && + gaim_account_get_ui_bool(account, GAIM_GTK_UI, "use-global-buddyicon", TRUE) && + prplinfo->icon_spec.format) { + char *icon = NULL; + if (filename) + icon = gaim_gtk_convert_buddy_icon(plug, filename); + gaim_account_set_buddy_icon(account, icon); g_free(icon); } } - } else { - for (accounts = gaim_accounts_get_all(); accounts != NULL; accounts = accounts->next) { - GaimAccount *account = accounts->data; - GaimPlugin *plug = gaim_find_prpl(gaim_account_get_protocol_id(account)); - if (plug) { - GaimPluginProtocolInfo *prplinfo = GAIM_PLUGIN_PROTOCOL_INFO(plug); - if (prplinfo != NULL && - gaim_account_get_ui_bool(account, GAIM_GTK_UI, "use-global-buddyicon", TRUE) && - prplinfo->icon_spec.format) { - char *icon = gaim_gtk_convert_buddy_icon(plug, filename); - gaim_account_set_buddy_icon(account, icon); - g_free(icon); - } - } - } } - gtk_gaim_status_box_set_buddy_icon(box, filename); } + gtk_gaim_status_box_set_buddy_icon(box, filename); } static void icon_choose_cb(const char *filename, gpointer data) { GtkGaimStatusBox *box = data; - if (box->account == NULL && filename) - /* The pref-connect callback does the actual work */ - gaim_prefs_set_string("/gaim/gtk/accounts/buddyicon", filename); - else - buddy_icon_set_cb(filename, data); + if (filename) { + if (box->account == NULL) + /* The pref-connect callback does the actual work */ + gaim_prefs_set_string("/gaim/gtk/accounts/buddyicon", filename); + else + buddy_icon_set_cb(filename, data); + } box->buddy_icon_sel = NULL; } Modified: trunk/gtk/gtkstatusbox.h =================================================================== --- trunk/gtk/gtkstatusbox.h 2006-11-21 02:27:31 UTC (rev 17798) +++ trunk/gtk/gtkstatusbox.h 2006-11-21 04:34:38 UTC (rev 17799) @@ -94,6 +94,7 @@ GtkWidget *buddy_icon_sel; GtkWidget *icon; GtkWidget *icon_box; + GtkWidget *icon_box_menu; GdkCursor *hand_cursor; GdkCursor *arrow_cursor; int icon_size; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-21 21:16:18
|
Revision: 17804 http://svn.sourceforge.net/gaim/?rev=17804&view=rev Author: seanegan Date: 2006-11-21 13:05:44 -0800 (Tue, 21 Nov 2006) Log Message: ----------- Add a post-processing function to assist translators with the Unicode font symbol. If someone can figure out how to find out at runtime if a glyph exists, let me know Modified Paths: -------------- trunk/gtk/gtkaccount.c trunk/gtk/gtkutils.c trunk/gtk/gtkutils.h Modified: trunk/gtk/gtkaccount.c =================================================================== --- trunk/gtk/gtkaccount.c 2006-11-21 16:35:51 UTC (rev 17803) +++ trunk/gtk/gtkaccount.c 2006-11-21 21:05:44 UTC (rev 17804) @@ -2072,7 +2072,8 @@ /* Create a helpful first-time-use label */ label = gtk_label_new(NULL); - gtk_label_set_markup(GTK_LABEL(label), _( + /* Translators: Please maintain the use of -> or <- to represent the menu heirarchy */ + gtk_label_set_markup(GTK_LABEL(label), gaim_gtk_make_pretty_arrows(_( "<span size='larger' weight='bold'>Welcome to Gaim!</span>\n\n" "You have no IM accounts configured. To start connecting with Gaim " @@ -2081,8 +2082,8 @@ "press <b>Add</b> again to configure them all.\n\n" "You can come back to this window to add, edit, or remove " - "accounts from <b>Accounts \342\207\250 Add/Edit</b> in the Buddy " - "List window")); + "accounts from <b>Accounts->Add/Edit</b> in the Buddy " + "List window"))); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_widget_show(label); Modified: trunk/gtk/gtkutils.c =================================================================== --- trunk/gtk/gtkutils.c 2006-11-21 16:35:51 UTC (rev 17803) +++ trunk/gtk/gtkutils.c 2006-11-21 21:05:44 UTC (rev 17804) @@ -2837,4 +2837,17 @@ gaim_blist_update_buddy_icon(buddy); } +char *gaim_gtk_make_pretty_arrows(const char *str) +{ + char *ret; + char **split = g_strsplit(str, "->", -1); + ret = g_strjoinv("\342\207\250", split); + g_strfreev(split); + split = g_strsplit(ret, "<-", -1); + g_free(ret); + ret = g_strjoinv("\342\207\246", split); + g_strfreev(split); + + return ret; +} Modified: trunk/gtk/gtkutils.h =================================================================== --- trunk/gtk/gtkutils.h 2006-11-21 16:35:51 UTC (rev 17803) +++ trunk/gtk/gtkutils.h 2006-11-21 21:05:44 UTC (rev 17804) @@ -501,3 +501,12 @@ * previously set custom buddy icon for the user is removed. */ void gaim_gtk_set_custom_buddy_icon(GaimAccount *account, const char *who, const char *filename); + +/** + * Converts "->" and "<-" in strings to Unicode arrow characters, for use in referencing + * menu items. + * + * @param str The text to convert + * @return A newly allocated string with unicode arrow characters + */ +char *gaim_gtk_make_pretty_arrows(const char *str); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-22 08:00:49
|
Revision: 17806 http://svn.sourceforge.net/gaim/?rev=17806&view=rev Author: seanegan Date: 2006-11-22 00:00:42 -0800 (Wed, 22 Nov 2006) Log Message: ----------- Helpful message in the blank buddy list as suggested by Mark. This is definitely filler text right now. I also wrote a 'kiosk mode' page which maybe I'll play with later, but now it's #if 0'ed out Modified Paths: -------------- trunk/gtk/gtkaccount.c trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h Modified: trunk/gtk/gtkaccount.c =================================================================== --- trunk/gtk/gtkaccount.c 2006-11-22 00:43:42 UTC (rev 17805) +++ trunk/gtk/gtkaccount.c 2006-11-22 08:00:42 UTC (rev 17806) @@ -2060,6 +2060,7 @@ GtkWidget *treeview; GtkTreeSelection *sel; GtkTargetEntry gte[] = {{"GAIM_ACCOUNT", GTK_TARGET_SAME_APP, 0}}; + char *pretty; frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); @@ -2073,7 +2074,7 @@ /* Create a helpful first-time-use label */ label = gtk_label_new(NULL); /* Translators: Please maintain the use of -> or <- to represent the menu heirarchy */ - gtk_label_set_markup(GTK_LABEL(label), gaim_gtk_make_pretty_arrows(_( + pretty = gaim_gtk_make_pretty_arrows(_( "<span size='larger' weight='bold'>Welcome to Gaim!</span>\n\n" "You have no IM accounts configured. To start connecting with Gaim " @@ -2083,7 +2084,10 @@ "You can come back to this window to add, edit, or remove " "accounts from <b>Accounts->Add/Edit</b> in the Buddy " - "List window"))); + "List window")); + gtk_label_set_markup(GTK_LABEL(label), pretty); + g_free(pretty); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_widget_show(label); Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-11-22 00:43:42 UTC (rev 17805) +++ trunk/gtk/gtkblist.c 2006-11-22 08:00:42 UTC (rev 17806) @@ -3730,6 +3730,11 @@ if (!gtkblist) return; + if (gaim_accounts_get_all_active()) + gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 1); + else + gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 0); + update_menu_bar(gtkblist); } @@ -3877,10 +3882,58 @@ create_connection_error_buttons, NULL); } + /******************************************/ /* End of connection error handling stuff */ /******************************************/ +#if 0 +static GtkWidget * +kiosk_page() +{ + GtkWidget *ret = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); + GtkWidget *label; + GtkWidget *entry; + GtkWidget *bbox; + GtkWidget *button; + + label = gtk_label_new(NULL); + gtk_box_pack_start(GTK_BOX(ret), label, TRUE, TRUE, 0); + + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), _("<b>Username:</b>")); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_box_pack_start(GTK_BOX(ret), label, FALSE, FALSE, 0); + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(ret), entry, FALSE, FALSE, 0); + + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), _("<b>Password:</b>")); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_box_pack_start(GTK_BOX(ret), label, FALSE, FALSE, 0); + entry = gtk_entry_new(); + gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); + gtk_box_pack_start(GTK_BOX(ret), entry, FALSE, FALSE, 0); + + label = gtk_label_new(" "); + gtk_box_pack_start(GTK_BOX(ret), label, FALSE, FALSE, 0); + + bbox = gtk_hbutton_box_new(); + button = gtk_button_new_with_mnemonic(_("_Login")); + gtk_box_pack_start(GTK_BOX(ret), bbox, FALSE, FALSE, 0); + gtk_container_add(GTK_CONTAINER(bbox), button); + + + label = gtk_label_new(NULL); + gtk_box_pack_start(GTK_BOX(ret), label, TRUE, TRUE, 0); + + gtk_container_set_border_width(GTK_CONTAINER(ret), GAIM_HIG_BORDER); + + gtk_widget_show_all(ret); + return ret; +} +#endif + static void gaim_gtk_blist_show(GaimBuddyList *list) { void *handle; @@ -3889,6 +3942,8 @@ GtkWidget *menu; GtkWidget *sw; GtkWidget *sep; + GtkWidget *label; + char *pretty; GtkAccelGroup *accel_group; GtkTreeSelection *selection; GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, @@ -3911,9 +3966,9 @@ gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List")); GTK_WINDOW(gtkblist->window)->allow_shrink = TRUE; - gtkblist->vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(gtkblist->vbox); - gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); + gtkblist->main_vbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(gtkblist->main_vbox); + gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->main_vbox); g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL); g_signal_connect(G_OBJECT(gtkblist->window), "configure_event", G_CALLBACK(gtk_blist_configure_cb), NULL); @@ -3940,11 +3995,40 @@ gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtkblist->menutray); gtk_widget_show(gtkblist->menutray); gtk_widget_show(menu); - gtk_box_pack_start(GTK_BOX(gtkblist->vbox), menu, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gtkblist->main_vbox), menu, FALSE, FALSE, 0); accountmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Accounts")); + /****************************** Notebook *************************************/ + gtkblist->notebook = gtk_notebook_new(); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkblist->notebook), FALSE); + gtk_notebook_set_show_border(GTK_NOTEBOOK(gtkblist->notebook), FALSE); + gtk_box_pack_start(GTK_BOX(gtkblist->main_vbox), gtkblist->notebook, TRUE, TRUE, 0); + +#if 0 + gtk_notebook_append_page(GTK_NOTEBOOK(gtkblist->notebook), kiosk_page(), NULL); +#endif + + /* Translators: Please maintain the use of -> and <- to refer to menu heirarchy */ + pretty = gaim_gtk_make_pretty_arrows(_("<span weight='bold' size='larger'>Welcome to Gaim!</span>\n\n" + + "You have no accounts enabled. Enable your IM accounts from the " + "<b>Accounts</b> window at <b>Accounts->Add/Edit</b>. Once you " + "enable accounts, you'll be able to sign on, set your status, " + "and talk to your friends.")); + label = gtk_label_new(NULL); + gtk_widget_set_size_request(label, gaim_prefs_get_int("/gaim/gtk/blist/width") - 12, -1); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.2); + gtk_label_set_markup(GTK_LABEL(label), pretty); + g_free(pretty); + gtk_notebook_append_page(GTK_NOTEBOOK(gtkblist->notebook),label, NULL); + gtkblist->vbox = gtk_vbox_new(FALSE, 0); + gtk_notebook_append_page(GTK_NOTEBOOK(gtkblist->notebook), gtkblist->vbox, NULL); + gtk_widget_show_all(gtkblist->notebook); + + /****************************** GtkTreeView **********************************/ sw = gtk_scrolled_window_new(NULL,NULL); gtk_widget_show(sw); @@ -5518,8 +5602,8 @@ gaim_prefs_add_string("/gaim/gtk/blist/sort_type", "alphabetical"); gaim_prefs_add_int("/gaim/gtk/blist/x", 0); gaim_prefs_add_int("/gaim/gtk/blist/y", 0); - gaim_prefs_add_int("/gaim/gtk/blist/width", 309); /* Golden ratio, baby */ - gaim_prefs_add_int("/gaim/gtk/blist/height", 500); /* Golden ratio, baby */ + gaim_prefs_add_int("/gaim/gtk/blist/width", 250); /* Golden ratio, baby */ + gaim_prefs_add_int("/gaim/gtk/blist/height", 405); /* Golden ratio, baby */ gaim_prefs_add_int("/gaim/gtk/blist/tooltip_delay", 500); /* Register our signals */ Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-11-22 00:43:42 UTC (rev 17805) +++ trunk/gtk/gtkblist.h 2006-11-22 08:00:42 UTC (rev 17806) @@ -61,8 +61,11 @@ */ struct _GaimGtkBuddyList { GtkWidget *window; - GtkWidget *vbox; /**< This is the vbox that everything gets packed into. Your plugin might - want to pack something in it itself. Go, plugins! */ + GtkWidget *notebook; /**< The notebook that switches between the real buddy list and the helpful + instructions page */ + GtkWidget *main_vbox; /**< This vbox contains the menu and notebook */ + GtkWidget *vbox; /**< This is the vbox that everything important gets packed into. + Your plugin might want to pack something in it itself. Go, plugins! */ GtkWidget *treeview; /**< It's a treeview... d'uh. */ GtkTreeStore *treemodel; /**< This is the treemodel. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-11-23 08:37:08
|
Revision: 17815 http://svn.sourceforge.net/gaim/?rev=17815&view=rev Author: seanegan Date: 2006-11-23 00:37:07 -0800 (Thu, 23 Nov 2006) Log Message: ----------- buddy-list alerts. I've made the two existing account ui_ops ('so-and-so has added you' and 'would you like to add so-and-so') use this. I'll follow up with a new 'so-and-so needs you to authorize him' ui_op, and replace the gaim_request_action() calls in the appropriate prpls Modified Paths: -------------- trunk/gtk/Makefile.am trunk/gtk/Makefile.mingw trunk/gtk/gtkaccount.c trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/gtkutils.c trunk/gtk/gtkutils.h Added Paths: ----------- trunk/gtk/gtkscrollbook.c trunk/gtk/gtkscrollbook.h Modified: trunk/gtk/Makefile.am =================================================================== --- trunk/gtk/Makefile.am 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/Makefile.am 2006-11-23 08:37:07 UTC (rev 17815) @@ -97,6 +97,7 @@ gtkrequest.c \ gtkroomlist.c \ gtksavedstatuses.c \ + gtkscrollbook.c \ gtksession.c \ gtksound.c \ gtksourceiter.c \ @@ -143,6 +144,7 @@ gtkrequest.h \ gtkroomlist.h \ gtksavedstatuses.h \ + gtkscrollbook.h \ gtksession.h \ gtksound.h \ gtksourceiter.h \ Modified: trunk/gtk/Makefile.mingw =================================================================== --- trunk/gtk/Makefile.mingw 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/Makefile.mingw 2006-11-23 08:37:07 UTC (rev 17815) @@ -82,6 +82,7 @@ gtkrequest.c \ gtkroomlist.c \ gtksavedstatuses.c \ + gtkscrollbook.c \ gtksound.c \ gtksourceiter.c \ gtkstatusbox.c \ Modified: trunk/gtk/gtkaccount.c =================================================================== --- trunk/gtk/gtkaccount.c 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/gtkaccount.c 2006-11-23 08:37:07 UTC (rev 17815) @@ -2176,6 +2176,7 @@ GtkWidget *button; int width, height; + if (accounts_window != NULL) { gtk_window_present(GTK_WINDOW(accounts_window->window)); return; @@ -2315,7 +2316,7 @@ : (gaim_connection_get_display_name(gc) != NULL ? gaim_connection_get_display_name(gc) : gaim_account_get_username(account))), - (msg != NULL ? ": " : "."), + (msg != NULL ? ":\n" : "."), (msg != NULL ? msg : "")); } @@ -2326,13 +2327,15 @@ { char *buffer; GaimConnection *gc; + GtkWidget *alert; gc = gaim_account_get_connection(account); buffer = make_info(account, gc, remote_user, id, alias, msg); + alert = gaim_gtk_make_mini_dialog(gc, GAIM_STOCK_DIALOG_INFO, buffer, + NULL, NULL, _("Close"), NULL, NULL); + gaim_gtk_blist_add_alert(alert); - gaim_notify_info(NULL, NULL, buffer, NULL); - g_free(buffer); } @@ -2344,6 +2347,7 @@ char *buffer; GaimConnection *gc; GaimGtkAccountAddUserData *data; + GtkWidget *alert; gc = gaim_account_get_connection(account); @@ -2351,14 +2355,14 @@ data->account = account; data->username = g_strdup(remote_user); data->alias = g_strdup(alias); - + buffer = make_info(account, gc, remote_user, id, alias, msg); - - gaim_request_action(NULL, NULL, _("Add buddy to your list?"), - buffer, GAIM_DEFAULT_ACTION_NONE, data, 2, - _("Add"), G_CALLBACK(add_user_cb), - _("Cancel"), G_CALLBACK(free_add_user_data)); - + alert = gaim_gtk_make_mini_dialog(gc, GAIM_STOCK_DIALOG_INFO, + _("Add buddy to your list?"), buffer, data, + _("Cancel"), G_CALLBACK(free_add_user_data), + _("Add"), G_CALLBACK(add_user_cb), NULL); + gaim_gtk_blist_add_alert(alert); + g_free(buffer); } Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/gtkblist.c 2006-11-23 08:37:07 UTC (rev 17815) @@ -54,6 +54,7 @@ #include "gtkprivacy.h" #include "gtkroomlist.h" #include "gtkstatusbox.h" +#include "gtkscrollbook.h" #include "gtkutils.h" #include <gdk/gdkkeysyms.h> @@ -4030,7 +4031,7 @@ gtkblist->vbox = gtk_vbox_new(FALSE, 0); gtk_notebook_append_page(GTK_NOTEBOOK(gtkblist->notebook), gtkblist->vbox, NULL); gtk_widget_show_all(gtkblist->notebook); - if (accounts = gaim_accounts_get_all_active()) { + if ((accounts = gaim_accounts_get_all_active())) { g_list_free(accounts); gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 1); } @@ -4178,6 +4179,9 @@ sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sep, FALSE, FALSE, 0); + + gtkblist->scrollbook = gtk_gaim_scroll_book_new(); + gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->scrollbook, FALSE, FALSE, 0); /* Create an empty vbox used for showing connection errors */ gtkblist->error_buttons = gtk_vbox_new(FALSE, 0); @@ -4278,6 +4282,8 @@ gtkblist, GAIM_CALLBACK(conversation_deleting_cb), gtkblist); + gtk_widget_hide(gtkblist->scrollbook); + /* emit our created signal */ gaim_signal_emit(handle, "gtkblist-created", list); } @@ -5497,7 +5503,12 @@ gaim_debug_info("gtkblist", "removed visibility manager: %d\n", visibility_manager_count); } +void gaim_gtk_blist_add_alert(GtkWidget *widget) +{ + gtk_container_add(GTK_CONTAINER(gtkblist->scrollbook), widget); +} + static GaimBlistUiOps blist_ui_ops = { gaim_gtk_blist_new_list, Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/gtkblist.h 2006-11-23 08:37:07 UTC (rev 17815) @@ -95,6 +95,9 @@ GList *tooltipdata; /**< The data for each "chunk" of the tooltip */ GaimBlistNode *selected_node; /**< The currently selected node */ + + GtkWidget *scrollbook; /**< Scrollbook for alerts */ + GtkWidget *error_buttons; /**< Box containing the connection error buttons */ GtkWidget *statusbox; /**< The status selector dropdown */ }; @@ -202,7 +205,14 @@ */ void gaim_gtk_blist_visibility_manager_remove(void); +/** + * Adds a mini-alert to the blist scrollbook + * + * @param widget The widget to add + */ +void gaim_gtk_blist_add_alert(GtkWidget *widget); + /************************************************************************** * @name GTK+ Buddy List sorting functions **************************************************************************/ Added: trunk/gtk/gtkscrollbook.c =================================================================== --- trunk/gtk/gtkscrollbook.c (rev 0) +++ trunk/gtk/gtkscrollbook.c 2006-11-23 08:37:07 UTC (rev 17815) @@ -0,0 +1,198 @@ +/* + * @file gtkscrollbook.c GTK+ Status Selection Widget + * @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 "gtkscrollbook.h" + + +static void gtk_gaim_scroll_book_init (GtkGaimScrollBook *scroll_book); +static void gtk_gaim_scroll_book_class_init (GtkGaimScrollBookClass *klass); + +GType +gtk_gaim_scroll_book_get_type (void) +{ + static GType scroll_book_type = 0; + + if (!scroll_book_type) + { + static const GTypeInfo scroll_book_info = + { + sizeof (GtkGaimScrollBookClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) gtk_gaim_scroll_book_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GtkGaimScrollBook), + 0, + (GInstanceInitFunc) gtk_gaim_scroll_book_init, + NULL /* value_table */ + }; + + scroll_book_type = g_type_register_static(GTK_TYPE_VBOX, + "GtkGaimScrollBook", + &scroll_book_info, + 0); + } + + return scroll_book_type; +} + +static void +scroll_left_cb(GtkGaimScrollBook *scroll_book) +{ + int index; + index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook)); + + if (index > 0) + gtk_notebook_set_current_page(GTK_NOTEBOOK(scroll_book->notebook), index - 1); +} + +static void +scroll_right_cb(GtkGaimScrollBook *scroll_book) +{ + int index, count; + index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook)); +#if GTK_CHECK_VERSION(2,2,0) + count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook)); +#else + count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children); +#endif + + if (index + 1 < count) + gtk_notebook_set_current_page(GTK_NOTEBOOK(scroll_book->notebook), index + 1); +} + +static void +refresh_scroll_box(GtkGaimScrollBook *scroll_book, int index, int count) +{ + char *label; + + gtk_widget_show_all(scroll_book); + if (count <= 1) + gtk_widget_hide(GTK_WIDGET(scroll_book->hbox)); + else + gtk_widget_show_all(GTK_WIDGET(scroll_book->hbox)); + + + label = g_strdup_printf("<span size='smaller' weight='bold'>(%d/%d)</span>", index+1, count); + gtk_label_set_markup(GTK_LABEL(scroll_book->label), label); + g_free(label); + + if (index == 0) + gtk_widget_set_sensitive(scroll_book->left_arrow, FALSE); + else + gtk_widget_set_sensitive(scroll_book->left_arrow, TRUE); + + + if (index +1== count) + gtk_widget_set_sensitive(scroll_book->right_arrow, FALSE); + else + gtk_widget_set_sensitive(scroll_book->right_arrow, TRUE); +} + + +static void +page_count_change_cb(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, GtkGaimScrollBook *scroll_book) +{ + int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook)); +#if GTK_CHECK_VERSION(2,2,0) + int count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook)); +#else + count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children); +#endif + refresh_scroll_box(scroll_book, index, count); + +} + +static void +switch_page_cb(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, GtkGaimScrollBook *scroll_book) +{ +#if GTK_CHECK_VERSION(2,2,0) + int count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook)); +#else + count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children); +#endif + refresh_scroll_box(scroll_book, page_num, count); +} + +static void +gtk_gaim_scroll_book_add(GtkContainer *container, GtkWidget *widget) +{ + gtk_widget_show(widget); + gtk_notebook_append_page(GTK_NOTEBOOK(GTK_GAIM_SCROLL_BOOK(container)->notebook), widget, NULL); +} + +static void +gtk_gaim_scroll_book_class_init (GtkGaimScrollBookClass *klass) +{ + GtkContainerClass *container_class = (GtkContainerClass*)klass; + + container_class->add = gtk_gaim_scroll_book_add; + +} + +static void +gtk_gaim_scroll_book_init (GtkGaimScrollBook *scroll_book) +{ + GtkWidget *eb; + + scroll_book->hbox = gtk_hbox_new(FALSE, 0); + + eb = gtk_event_box_new(); + gtk_box_pack_end(GTK_BOX(scroll_book->hbox), eb, FALSE, FALSE, 0); + scroll_book->right_arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE); + gtk_container_add(GTK_CONTAINER(eb), scroll_book->right_arrow); + g_signal_connect_swapped(G_OBJECT(eb), "button-press-event", G_CALLBACK(scroll_right_cb), scroll_book); + + scroll_book->label = gtk_label_new(NULL); + gtk_box_pack_end(GTK_BOX(scroll_book->hbox), scroll_book->label, FALSE, FALSE, 0); + + eb = gtk_event_box_new(); + gtk_box_pack_end(GTK_BOX(scroll_book->hbox), eb, FALSE, FALSE, 0); + scroll_book->left_arrow = gtk_arrow_new(GTK_ARROW_LEFT, GTK_SHADOW_NONE); + gtk_container_add(GTK_CONTAINER(eb), scroll_book->left_arrow); + g_signal_connect_swapped(G_OBJECT(eb), "button-press-event", G_CALLBACK(scroll_left_cb), scroll_book); + + gtk_box_pack_start(GTK_BOX(scroll_book), scroll_book->hbox, FALSE, FALSE, 0); + + scroll_book->notebook = gtk_notebook_new(); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(scroll_book->notebook), FALSE); + gtk_notebook_set_show_border(GTK_NOTEBOOK(scroll_book->notebook), FALSE); + + gtk_box_pack_start(GTK_BOX(scroll_book), scroll_book->notebook, TRUE, TRUE, 0); + + g_signal_connect(G_OBJECT(scroll_book->notebook), "page-added", G_CALLBACK(page_count_change_cb), scroll_book); + g_signal_connect(G_OBJECT(scroll_book->notebook), "page-removed", G_CALLBACK(page_count_change_cb), scroll_book); + g_signal_connect(G_OBJECT(scroll_book->notebook), "switch-page", G_CALLBACK(switch_page_cb), scroll_book); + gtk_widget_hide(scroll_book->hbox); +} + + + +GtkWidget * +gtk_gaim_scroll_book_new() +{ + return g_object_new(GTK_GAIM_TYPE_SCROLL_BOOK, NULL); +} Property changes on: trunk/gtk/gtkscrollbook.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/gtk/gtkscrollbook.h =================================================================== --- trunk/gtk/gtkscrollbook.h (rev 0) +++ trunk/gtk/gtkscrollbook.h 2006-11-23 08:37:07 UTC (rev 17815) @@ -0,0 +1,80 @@ +/* + * @file gtkscrollbook GTK+ Scrolling notebook Widget + * @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 __GTK_GAIM_SCROLL_BOOK_H__ +#define __GTK_GAIM_SCROLL_BOOK_H__ + +#include <gtk/gtk.h> + + +G_BEGIN_DECLS + +#define GTK_GAIM_TYPE_SCROLL_BOOK (gtk_gaim_scroll_book_get_type ()) +#define GTK_GAIM_SCROLL_BOOK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_GAIM_TYPE_SCROLL_BOOK, GtkGaimScrollBook)) +#define GTK_GAIM_SCROLL_BOOK_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), GTK_GAIM_TYPE_SCROLL_BOOK, GtkGaimScrollBookClass)) +#define GTK_GAIM_IS_SCROLL_BOOK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_GAIM_TYPE_SCROLL_BOOK)) +#define GTK_GAIM_IS_SCROLL_BOOK_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), GTK_GAIM_TYPE_SCROLL_BOOK)) +#define GTK_GAIM_SCROLL_BOOK_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), GTK_GAIM_TYPE_SCROLL_BOOK, GtkGaimScrollBookClass)) + +typedef struct _GtkGaimScrollBook GtkGaimScrollBook; +typedef struct _GtkGaimScrollBookClass GtkGaimScrollBookClass; + +struct _GtkGaimScrollBook +{ + GtkVBox parent_instance; + + GtkWidget *notebook; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *left_arrow; + GtkWidget *right_arrow; + + /* Padding for future expansion */ + void (*_gtk_reserved0) (void); + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); + +}; + + +struct _GtkGaimScrollBookClass +{ + GtkComboBoxClass parent_class; + + /* Padding for future expansion */ + void (*_gtk_reserved0) (void); + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); +}; + + +GType gtk_gaim_scroll_book_get_type (void) G_GNUC_CONST; +GtkWidget *gtk_gaim_scroll_book_new (void); + +G_END_DECLS + +#endif /* __GTK_GAIM_SCROLL_BOOK_H__ */ Property changes on: trunk/gtk/gtkscrollbook.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/gtk/gtkutils.c =================================================================== --- trunk/gtk/gtkutils.c 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/gtkutils.c 2006-11-23 08:37:07 UTC (rev 17815) @@ -2851,3 +2851,114 @@ return ret; } + +GSList *minidialogs = NULL; + +static void * +gaim_gtk_utils_get_handle() +{ + static int handle; + + return &handle; +} + +static void connection_signed_off_cb(GaimConnection *gc) +{ + GSList *list; + for (list = minidialogs; list; list = list->next) { + if (g_object_get_data(G_OBJECT(list->data), "gc") == gc) { + gtk_widget_destroy(GTK_WIDGET(list->data)); + } + } +} + +static void alert_killed_cb(GtkWidget *widget) +{ + minidialogs = g_slist_remove(minidialogs, widget); +} + +void *gaim_gtk_make_mini_dialog(GaimConnection *gc, const char *icon_name, + const char *primary, const char *secondary, + void *user_data, ...) +{ + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *bbox; + GtkWidget *label; + GtkWidget *button; + GtkWidget *img = NULL; + char label_text[2048]; + const char *button_text; + GCallback callback; + char *primary_esc, *secondary_esc; + va_list args; + static gboolean first_call = TRUE; + + img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_BUTTON); + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); + + vbox = gtk_vbox_new(FALSE,0); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); + + g_object_set_data(G_OBJECT(vbox), "gc" ,gc); + minidialogs = g_slist_prepend(minidialogs, vbox); + g_signal_connect(G_OBJECT(vbox), "destroy", G_CALLBACK(alert_killed_cb), NULL); + + if (first_call) { + first_call = FALSE; + gaim_signal_connect(gaim_connections_get_handle(), "signed-off", + gaim_gtk_utils_get_handle(), + GAIM_CALLBACK(connection_signed_off_cb), NULL); + } + + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + + if (img != NULL) + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + + primary_esc = g_markup_escape_text(primary, -1); + + if (secondary) + secondary_esc = g_markup_escape_text(secondary, -1); + g_snprintf(label_text, sizeof(label_text), + "<span weight=\"bold\" size=\"smaller\">%s</span>%s<span size=\"smaller\">%s</span>", + primary_esc, secondary ? "\n" : "", secondary?secondary_esc:""); + g_free(primary_esc); + label = gtk_label_new(NULL); + gtk_widget_modify_text(vbox, GTK_STATE_NORMAL, &(label->style->white)); + gtk_label_set_markup(GTK_LABEL(label), label_text); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); +#if GTK_CHECK_VERSION(2,6,0) + g_object_set(label, "ellipsize", PANGO_ELLIPSIZE_END, NULL); +#endif + + bbox = gtk_hbutton_box_new(); + gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_box_set_spacing(GTK_BOX(bbox), 6); + + va_start(args, user_data); + while ((button_text = va_arg(args, char*))) { + callback = va_arg(args, GCallback); + button = gtk_button_new(); + gtk_container_set_border_width(GTK_CONTAINER(button), 0); + if (callback) + g_signal_connect_swapped(G_OBJECT(button), "clicked", callback, user_data); + g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), vbox); + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(button), hbox); + g_snprintf(label_text, sizeof(label_text), + "<span size=\"smaller\">%s</span>", button_text); + label = gtk_label_new(NULL); + gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), label_text); + gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(bbox), button); + } + va_end(args); + + return vbox; +} Modified: trunk/gtk/gtkutils.h =================================================================== --- trunk/gtk/gtkutils.h 2006-11-22 21:33:51 UTC (rev 17814) +++ trunk/gtk/gtkutils.h 2006-11-23 08:37:07 UTC (rev 17815) @@ -510,3 +510,16 @@ * @return A newly allocated string with unicode arrow characters */ char *gaim_gtk_make_pretty_arrows(const char *str); + +/** + * Creates a "mini-dialog" suitable for embedding in the buddy list scrollbook + * + * @param handle A handle + * @param primary The primary text + * @param secondary The secondary text + * @param user_data Data to pass to the callbacks + * @param ... a NULL-terminated list of button labels and callbacks + */ +void *gaim_gtk_make_mini_dialog(GaimConnection *handle, const char* stock_id, + const char *primary, const char *secondary, + void *user_data, ...); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-11-28 00:15:44
|
Revision: 17832 http://svn.sourceforge.net/gaim/?rev=17832&view=rev Author: datallah Date: 2006-11-27 16:15:31 -0800 (Mon, 27 Nov 2006) Log Message: ----------- Fix "Hide new IM conversations when away" to update the conv that gets show when you return. This makes the conv tab title, the "hidden" prpl icon overlay and the "hidden" blist indicator all update correctly. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkconv.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-11-27 22:34:46 UTC (rev 17831) +++ trunk/gtk/gtkblist.c 2006-11-28 00:15:31 UTC (rev 17832) @@ -3424,17 +3424,18 @@ static GtkWidget *menu = NULL; GList *convs = NULL; - if (menu) + if (menu) { gtk_widget_destroy(menu); + menu = NULL; + } - menu = gtk_menu_new(); - convs = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT, TRUE, 0); - if (!convs) { + if (!convs) /* no conversations added, don't show the menu */ - gtk_widget_destroy(menu); return; - } + + menu = gtk_menu_new(); + gaim_gtk_conversations_fill_menu(menu, convs); g_list_free(convs); gtk_widget_show_all(menu); Modified: trunk/gtk/gtkconv.c =================================================================== --- trunk/gtk/gtkconv.c 2006-11-27 22:34:46 UTC (rev 17831) +++ trunk/gtk/gtkconv.c 2006-11-28 00:15:31 UTC (rev 17832) @@ -74,9 +74,9 @@ { GAIM_GTKCONV_SET_TITLE = 1 << 0, GAIM_GTKCONV_BUDDY_ICON = 1 << 1, - GAIM_GTKCONV_MENU = 1 << 2, + GAIM_GTKCONV_MENU = 1 << 2, GAIM_GTKCONV_TAB_ICON = 1 << 3, - GAIM_GTKCONV_TOPIC = 1 << 4, + GAIM_GTKCONV_TOPIC = 1 << 4, GAIM_GTKCONV_SMILEY_THEME = 1 << 5, GAIM_GTKCONV_COLORIZE_TITLE = 1 << 6 }GaimGtkConvFields; @@ -6356,6 +6356,10 @@ gaim_gtk_conv_window_remove_gtkconv(hidden_convwin, gtkconv); gaim_gtkconv_placement_place(gtkconv); + + /* TODO: do we need to do anything for any other conversations that are in the same gtkconv here? + * I'm a little concerned that not doing so will cause the "pending" indicator in the gtkblist not to be cleared. -DAA*/ + gaim_conversation_update(conv, GAIM_CONV_UPDATE_UNSEEN); } } @@ -7180,7 +7184,7 @@ if (tab_clicked == -1) return FALSE; - + gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, tab_clicked); close_conv_cb(NULL, gtkconv); return TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <the...@us...> - 2006-11-28 07:26:00
|
Revision: 17836 http://svn.sourceforge.net/gaim/?rev=17836&view=rev Author: thekingant Date: 2006-11-27 23:26:00 -0800 (Mon, 27 Nov 2006) Log Message: ----------- Warning fixes Modified Paths: -------------- trunk/gtk/gtkscrollbook.c trunk/gtk/gtkutils.c Modified: trunk/gtk/gtkscrollbook.c =================================================================== --- trunk/gtk/gtkscrollbook.c 2006-11-28 07:06:37 UTC (rev 17835) +++ trunk/gtk/gtkscrollbook.c 2006-11-28 07:26:00 UTC (rev 17836) @@ -89,7 +89,7 @@ { char *label; - gtk_widget_show_all(scroll_book); + gtk_widget_show_all(GTK_WIDGET(scroll_book)); if (count <= 1) gtk_widget_hide(GTK_WIDGET(scroll_book->hbox)); else Modified: trunk/gtk/gtkutils.c =================================================================== --- trunk/gtk/gtkutils.c 2006-11-28 07:06:37 UTC (rev 17835) +++ trunk/gtk/gtkutils.c 2006-11-28 07:26:00 UTC (rev 17836) @@ -2957,7 +2957,7 @@ gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), label_text); gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); - gtk_box_pack_end(GTK_CONTAINER(hbox2), button, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(hbox2), button, FALSE, FALSE, 0); gtk_size_group_add_widget(sg, button); } va_end(args); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-12-01 05:03:07
|
Revision: 17864 http://svn.sourceforge.net/gaim/?rev=17864&view=rev Author: seanegan Date: 2006-11-30 21:01:51 -0800 (Thu, 30 Nov 2006) Log Message: ----------- Work in progress. I'm committing this mostly so i can work on it from home. I'm hacking up statusbox to no longer descend from combobox to better get the appearance and behavior we want. Seems mostly functional, but a lot of looes ends to tie up. Modified Paths: -------------- trunk/gtk/gtkstatusbox.c trunk/gtk/gtkstatusbox.h Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-12-01 04:38:54 UTC (rev 17863) +++ trunk/gtk/gtkstatusbox.c 2006-12-01 05:01:51 UTC (rev 17864) @@ -73,21 +73,19 @@ static void gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box); static void status_menu_refresh_iter(GtkGaimStatusBox *status_box); static void gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box); -static void gtk_gaim_status_box_changed(GtkComboBox *box); +static void gtk_gaim_status_box_changed(GtkGaimStatusBox *box); 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 gaim_gtk_status_box_popup(GtkGaimStatusBox *box); +static void gaim_gtk_status_box_popdown(GtkGaimStatusBox *box); static void do_colorshift (GdkPixbuf *dest, GdkPixbuf *src, int shift); static void icon_choose_cb(const char *filename, gpointer data); static void remove_buddy_icon_cb(GtkWidget *w, GtkGaimStatusBox *box); -static void (*combo_box_size_request)(GtkWidget *widget, GtkRequisition *requisition); -static void (*combo_box_size_allocate)(GtkWidget *widget, GtkAllocation *allocation); -static void (*combo_box_forall) (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); - enum { /** A GtkGaimStatusBoxItemType */ TYPE_COLUMN, @@ -123,7 +121,7 @@ PROP_ICON_SEL, }; -GtkComboBoxClass *parent_class = NULL; +GtkContainerClass *parent_class = NULL; static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass); static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box); @@ -149,7 +147,7 @@ NULL /* value_table */ }; - status_box_type = g_type_register_static(GTK_TYPE_COMBO_BOX, + status_box_type = g_type_register_static(GTK_TYPE_CONTAINER, "GtkGaimStatusBox", &status_box_info, 0); @@ -199,8 +197,13 @@ } if (status_no != -1) { + GtkTreePath *path; gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE); - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), status_no); + path = gtk_tree_path_new_from_indices(status_no, -1); + if (status_box->active_row) + gtk_tree_row_reference_free(status_box->active_row); + status_box->active_row = gtk_tree_row_reference_new(status_box->dropdown_store, path); + gtk_tree_path_free(path); message = gaim_status_get_attr_string(newstatus, "message"); @@ -324,6 +327,9 @@ status_box->icon = gtk_image_new(); status_box->icon_box = gtk_event_box_new(); + gtk_widget_set_parent(status_box->icon_box, GTK_WIDGET(status_box)); + gtk_widget_show(status_box->icon_box); + if (status_box->account && !gaim_account_get_ui_bool(status_box->account, GAIM_GTK_UI, "use-global-buddyicon", TRUE)) { @@ -353,9 +359,7 @@ g_signal_connect(G_OBJECT(status_box->icon_box), "button-press-event", G_CALLBACK(icon_box_press_cb), status_box); gtk_container_add(GTK_CONTAINER(status_box->icon_box), status_box->icon); - - gtk_widget_show_all(status_box->icon_box); - gtk_widget_set_parent(status_box->icon_box, GTK_WIDGET(status_box)); + gtk_widget_show(status_box->icon); } static void @@ -446,27 +450,27 @@ G_OBJECT_CLASS(parent_class)->finalize(obj); } +static GType +gtk_gaim_status_box_child_type (GtkContainer *container) +{ + return GTK_TYPE_WIDGET; +} + static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass) { GObjectClass *object_class; - GtkComboBoxClass *combo_class; GtkWidgetClass *widget_class; GtkContainerClass *container_class = (GtkContainerClass*)klass; parent_class = g_type_class_peek_parent(klass); - combo_class = (GtkComboBoxClass*)klass; - combo_class->changed = gtk_gaim_status_box_changed; - widget_class = (GtkWidgetClass*)klass; - combo_box_size_request = widget_class->size_request; widget_class->size_request = gtk_gaim_status_box_size_request; - combo_box_size_allocate = widget_class->size_allocate; widget_class->size_allocate = gtk_gaim_status_box_size_allocate; widget_class->expose_event = gtk_gaim_status_box_expose_event; - combo_box_forall = container_class->forall; + container_class->child_type = gtk_gaim_status_box_child_type; container_class->forall = gtk_gaim_status_box_forall; container_class->remove = NULL; @@ -504,7 +508,6 @@ static void gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box) { - gboolean show_buddy_icons; GtkIconSize icon_size; GtkStyle *style; char aa_color[8]; @@ -515,13 +518,8 @@ gboolean account_status = FALSE; GaimAccount *acct = (status_box->token_status_account) ? status_box->token_status_account : status_box->account; - - show_buddy_icons = gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"); - if (show_buddy_icons) - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); - else - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); - + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); + style = gtk_widget_get_style(GTK_WIDGET(status_box)); snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x", style->text_aa[GTK_STATE_NORMAL].red >> 8, @@ -542,7 +540,11 @@ gpointer data; /* Primary (get the status selected in the dropdown) */ - gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter); + path = gtk_tree_row_reference_get_path(status_box->active_row); + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(status_box->dropdown_store), &iter, path)) + return; + gtk_tree_path_free(path); + gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, TYPE_COLUMN, &type, DATA_COLUMN, &data, @@ -595,11 +597,11 @@ if (account_status) pixbuf = gaim_gtk_create_prpl_icon_with_status(acct, gaim_status_get_type(gaim_account_get_active_status(acct)), - show_buddy_icons ? 1.0 : 0.5); + 0.5); else pixbuf = gaim_gtk_create_gaim_icon_with_status( gaim_savedstatus_get_type(saved_status), - show_buddy_icons ? 1.0 : 0.5); + 0.5); if (!gaim_savedstatus_is_transient(saved_status)) { @@ -622,15 +624,12 @@ } if (status_box->account != NULL) { - text = g_strdup_printf("%s%s<span size=\"smaller\" color=\"%s\">%s</span>", - gaim_account_get_username(status_box->account), - show_buddy_icons ? "\n" : " - ", aa_color, - secondary ? secondary : primary); + text = g_strdup_printf("%s - <span size=\"smaller\" color=\"%s\">%s</span>", + gaim_account_get_username(status_box->account), + aa_color, secondary ? secondary : primary); } else if (secondary != NULL) { - char *separator; - separator = show_buddy_icons ? "\n" : " - "; - text = g_strdup_printf("%s<span size=\"smaller\" color=\"%s\">%s%s</span>", - primary, aa_color, separator, secondary); + text = g_strdup_printf("%s<span size=\"smaller\" color=\"%s\"> - %s</span>", + primary, aa_color, secondary); } else { text = g_strdup(primary); } @@ -716,8 +715,14 @@ (primitive == GAIM_STATUS_INVISIBLE) || (primitive == GAIM_STATUS_OFFLINE)) && (!gaim_savedstatus_has_substatuses(saved_status))) { + GtkTreePath *path; index = get_statusbox_index(status_box, saved_status); - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), index); + path = gtk_tree_path_new_from_indices(index, -1); + if (status_box->active_row) + gtk_tree_row_reference_free(status_box->active_row); + status_box->active_row = gtk_tree_row_reference_new(status_box->dropdown_store, path); + gtk_tree_path_free(path); + } else { @@ -726,7 +731,9 @@ gpointer data; /* Unset the active item */ - gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), -1); + if (status_box->active_row) + gtk_tree_row_reference_free(status_box->active_row); + status_box->active_row = NULL; /* If this saved status is in the list store, then set it as the active item */ if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(status_box->dropdown_store), &iter)) @@ -754,7 +761,8 @@ || !strcmp(name, acct_status_name)) { /* Found! */ - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); + // gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); + g_free(name); break; } @@ -764,7 +772,7 @@ (GPOINTER_TO_INT(data) == gaim_savedstatus_get_creation_time(saved_status))) { /* Found! */ - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); + // gtk_combo_box_set_active_iter(GTK_COMBO_BOX(status_box), &iter); break; } } @@ -804,8 +812,7 @@ static void add_popular_statuses(GtkGaimStatusBox *statusbox) { - gboolean show_buddy_icons; - GtkIconSize icon_size; + GtkIconSize icon_size; GList *list, *cur; GdkPixbuf *pixbuf, *emblem; int width, height; @@ -815,11 +822,7 @@ /* Odd... oh well, nothing we can do about it. */ return; - show_buddy_icons = gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"); - if (show_buddy_icons) - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); - else - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); gtk_gaim_status_box_add_separator(statusbox); @@ -832,7 +835,7 @@ /* Get an appropriate status icon */ pixbuf = gaim_gtk_create_gaim_icon_with_status( gaim_savedstatus_get_type(saved), - show_buddy_icons ? 1.0 : 0.5); + 0.5); if (gaim_savedstatus_is_transient(saved)) { @@ -927,7 +930,7 @@ } static void -add_account_statuses(GtkGaimStatusBox *status_box, GaimAccount *account, gboolean show_buddy_icons) +add_account_statuses(GtkGaimStatusBox *status_box, GaimAccount *account) { /* Per-account */ const GList *l; @@ -940,8 +943,7 @@ if (!gaim_status_type_is_user_settable(status_type)) continue; - tmp = gaim_gtk_create_prpl_icon_with_status(account, status_type, - show_buddy_icons ? 1.0 : 0.5); + tmp = gaim_gtk_create_prpl_icon_with_status(account, status_type, 0.5); gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_PRIMITIVE, tmp, gaim_status_type_get_name(status_type), @@ -950,24 +952,18 @@ if (tmp != NULL) g_object_unref(tmp); } - gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); } static void gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box) { - gboolean show_buddy_icons; GdkPixbuf *pixbuf, *pixbuf2, *pixbuf3, *pixbuf4; GtkIconSize icon_size; - show_buddy_icons = gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"); - if (show_buddy_icons) - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); - else - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); /* Unset the model while clearing it */ - gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(status_box->tree_view), NULL); gtk_list_store_clear(status_box->dropdown_store); /* Don't set the model until the new statuses have been added to the box. * What is presumably a bug in Gtk < 2.4 causes things to get all confused @@ -982,7 +978,7 @@ * If so, display them instead of our global list. */ if (status_box->token_status_account) { - add_account_statuses(status_box, status_box->token_status_account, show_buddy_icons); + add_account_statuses(status_box, status_box->token_status_account); } else { /* Global */ pixbuf2 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_AWAY, @@ -1009,19 +1005,19 @@ gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_SAVED, pixbuf, _("Saved..."), NULL, NULL); if (pixbuf) g_object_unref(G_OBJECT(pixbuf)); - gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); status_menu_refresh_iter(status_box); } else { - add_account_statuses(status_box, status_box->account, show_buddy_icons); + add_account_statuses(status_box, status_box->account); update_to_reflect_account_status(status_box, status_box->account, gaim_account_get_active_status(status_box->account)); } + gtk_tree_view_set_model(GTK_TREE_VIEW(status_box->tree_view), status_box->dropdown_store); } static gboolean combo_box_scroll_event_cb(GtkWidget *w, GdkEventScroll *event, GtkIMHtml *imhtml) { - gtk_combo_box_popup(GTK_COMBO_BOX(w)); + gaim_gtk_status_box_popup(GTK_GAIM_STATUS_BOX(w)); return TRUE; } @@ -1088,16 +1084,10 @@ cache_pixbufs(GtkGaimStatusBox *status_box) { GtkIconSize icon_size; + + g_object_set(G_OBJECT(status_box->icon_rend), "xpad", 3, NULL); + icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE); - if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) - { - g_object_set(G_OBJECT(status_box->icon_rend), "xpad", 6, NULL); - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_TWO_LINE); - } else { - g_object_set(G_OBJECT(status_box->icon_rend), "xpad", 3, NULL); - icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE); - } - if (status_box->connecting_pixbufs[0] != NULL) gdk_pixbuf_unref(status_box->connecting_pixbufs[0]); if (status_box->connecting_pixbufs[1] != NULL) @@ -1157,16 +1147,6 @@ } static void -buddy_list_details_pref_changed_cb(const char *name, GaimPrefType type, - gconstpointer val, gpointer data) -{ - GtkGaimStatusBox *status_box = (GtkGaimStatusBox *)data; - - cache_pixbufs(status_box); - gtk_gaim_status_box_regenerate(status_box); -} - -static void spellcheck_prefs_cb(const char *name, GaimPrefType type, gconstpointer value, gpointer data) { @@ -1190,7 +1170,6 @@ if (event->button != 1) return FALSE; - gtk_combo_box_popdown(GTK_COMBO_BOX(box)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE); if (!box->imhtml_visible) g_signal_emit_by_name(G_OBJECT(box), "changed", NULL, NULL); @@ -1209,10 +1188,101 @@ #endif static void +gtk_gaim_status_box_list_position (GtkGaimStatusBox *status_box, int *x, int *y, int *width, int *height) +{ + GdkScreen *screen; + gint monitor_num; + GdkRectangle monitor; + GtkRequisition popup_req; + GtkPolicyType hpolicy, vpolicy; + + gdk_window_get_origin (GTK_WIDGET(status_box)->window, x, y); + + *x += GTK_WIDGET(status_box)->allocation.x; + *y += GTK_WIDGET(status_box)->allocation.y; + + *width = GTK_WIDGET(status_box)->allocation.width; + + hpolicy = vpolicy = GTK_POLICY_NEVER; + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window), + hpolicy, vpolicy); + gtk_widget_size_request (status_box->popup_frame, &popup_req); + + if (popup_req.width > *width) + { + hpolicy = GTK_POLICY_ALWAYS; + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window), + hpolicy, vpolicy); + gtk_widget_size_request (status_box->popup_frame, &popup_req); + } + + *height = popup_req.height; + + screen = gtk_widget_get_screen (GTK_WIDGET (status_box)); + monitor_num = gdk_screen_get_monitor_at_window (screen, + GTK_WIDGET (status_box)->window); + gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); + + if (*x < monitor.x) + *x = monitor.x; + else if (*x + *width > monitor.x + monitor.width) + *x = monitor.x + monitor.width - *width; + + if (*y + GTK_WIDGET(status_box)->allocation.height + *height <= monitor.y + monitor.height) + *y += GTK_WIDGET(status_box)->allocation.height; + else if (*y - *height >= monitor.y) + *y -= *height; + else if (monitor.y + monitor.height - (*y + GTK_WIDGET(status_box)->allocation.height) > *y - monitor.y) + { + *y += GTK_WIDGET(status_box)->allocation.height; + *height = monitor.y + monitor.height - *y; + } + else + { + *height = *y - monitor.y; + *y = monitor.y; + } + + if (popup_req.height > *height) + { + vpolicy = GTK_POLICY_ALWAYS; + + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window), + hpolicy, vpolicy); + } +} + +static void +gaim_gtk_status_box_popup(GtkGaimStatusBox *box) +{ + int width, height, x, y; + gtk_gaim_status_box_list_position (box, &x, &y, &width, &height); + + gtk_widget_set_size_request (box->popup_window, width, height); + gtk_window_move (GTK_WINDOW (box->popup_window), x, y); + gtk_widget_show(box->popup_window); + box->popup_in_progress = TRUE; +} + +static void +gaim_gtk_status_box_popdown(GtkGaimStatusBox *box) { + gtk_widget_hide(box->popup_window); + box->popup_in_progress = FALSE; + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (box->toggle_button), + FALSE); + +} + + +static void toggled_cb(GtkWidget *widget, GtkGaimStatusBox *box) { - gtk_combo_box_popup(GTK_COMBO_BOX(box)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE); + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { + if (!box->popup_in_progress) + gaim_gtk_status_box_popup (box); + } else { + gaim_gtk_status_box_popdown(box); + } } static void @@ -1287,18 +1357,45 @@ static void update_buddyicon_cb(const char *name, GaimPrefType type, - gconstpointer value, gpointer data) + gconstpointer value, gpointer data) { buddy_icon_set_cb(value, (GtkGaimStatusBox*) data); } +static gboolean +treeview_button_release_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *status_box) +{ + GtkTreePath *path = NULL; + int ret = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (status_box->tree_view), + event->x, event->y, + &path, + NULL, NULL, NULL); + + if (!ret) + return TRUE; /* clicked outside window? */ + + if (status_box->active_row) + gtk_tree_row_reference_free(status_box->active_row); + + status_box->active_row = gtk_tree_row_reference_new(GTK_TREE_MODEL(status_box->dropdown_store), path); + gtk_tree_path_free (path); + + gaim_gtk_status_box_popdown (status_box); + gtk_gaim_status_box_changed(status_box); + + return TRUE; +} + static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box) { GtkCellRenderer *text_rend; GtkCellRenderer *icon_rend; GtkTextBuffer *buffer; + GtkWidget *toplevel; + GtkTreeSelection *sel; + GTK_WIDGET_SET_FLAGS (status_box, GTK_NO_WINDOW); status_box->imhtml_visible = FALSE; status_box->network_available = gaim_network_is_available(); status_box->connecting = FALSE; @@ -1308,12 +1405,11 @@ status_box->cell_view = gtk_cell_view_new(); status_box->vsep = gtk_vseparator_new(); status_box->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); - + status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); status_box->dropdown_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); - gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); +; gtk_cell_view_set_model(GTK_CELL_VIEW(status_box->cell_view), GTK_TREE_MODEL(status_box->store)); - gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(status_box), 0); gtk_list_store_append(status_box->store, &(status_box->iter)); gtk_container_add(GTK_CONTAINER(status_box->toggle_button), status_box->hbox); @@ -1327,10 +1423,59 @@ text_rend = gtk_cell_renderer_text_new(); icon_rend = gtk_cell_renderer_pixbuf_new(); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), icon_rend, FALSE); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), text_rend, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), icon_rend, "pixbuf", ICON_COLUMN, NULL); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), text_rend, "markup", TEXT_COLUMN, NULL); + + + status_box->popup_window = gtk_window_new (GTK_WINDOW_POPUP); + + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (status_box)); + if (GTK_IS_WINDOW (toplevel)) { + gtk_window_set_transient_for (GTK_WINDOW (status_box->popup_window), + GTK_WINDOW (toplevel)); + } + + gtk_window_set_resizable (GTK_WINDOW (status_box->popup_window), FALSE); + gtk_window_set_screen (GTK_WINDOW (status_box->popup_window), + gtk_widget_get_screen (GTK_WIDGET (status_box))); + status_box->popup_frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (status_box->popup_frame), + GTK_SHADOW_ETCHED_IN); + gtk_container_add (GTK_CONTAINER (status_box->popup_window), + status_box->popup_frame); + + gtk_widget_show (status_box->popup_frame); + + status_box->scrolled_window = gtk_scrolled_window_new (NULL, NULL); + + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window), + GTK_POLICY_NEVER, + GTK_POLICY_NEVER); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (status_box->scrolled_window), + GTK_SHADOW_NONE); + + gtk_widget_show (status_box->scrolled_window); + + gtk_container_add (GTK_CONTAINER (status_box->popup_frame), + status_box->scrolled_window); + + status_box->tree_view = gtk_tree_view_new (); + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (status_box->tree_view)); + gtk_tree_selection_set_mode (sel, GTK_SELECTION_BROWSE); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (status_box->tree_view), + FALSE); + gtk_tree_view_set_hover_selection (GTK_TREE_VIEW (status_box->tree_view), + TRUE); + gtk_tree_view_set_model (GTK_TREE_VIEW (status_box->tree_view), + status_box->dropdown_store); + status_box->column = gtk_tree_view_column_new (); + gtk_tree_view_append_column (GTK_TREE_VIEW (status_box->tree_view), + status_box->column); + gtk_tree_view_column_pack_start(status_box->column, icon_rend, FALSE); + gtk_tree_view_column_pack_start(status_box->column, text_rend, TRUE); + gtk_tree_view_column_set_attributes(GTK_CELL_LAYOUT(status_box->column), icon_rend, "pixbuf", ICON_COLUMN, NULL); + gtk_tree_view_column_set_attributes(GTK_CELL_LAYOUT(status_box->column), text_rend, "markup", TEXT_COLUMN, NULL); + gtk_container_add(GTK_CONTAINER(status_box->scrolled_window), status_box->tree_view); + gtk_widget_show(status_box->tree_view); + #if GTK_CHECK_VERSION(2, 6, 0) g_object_set(text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); #endif @@ -1370,17 +1515,19 @@ gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(status_box->imhtml)); #endif gtk_widget_set_parent(status_box->vbox, GTK_WIDGET(status_box)); + gtk_widget_show_all(status_box->vbox); + gtk_widget_set_parent(status_box->toggle_button, GTK_WIDGET(status_box)); - GTK_BIN(status_box)->child = status_box->toggle_button; gtk_box_pack_start(GTK_BOX(status_box->vbox), status_box->sw, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(status_box), "scroll_event", G_CALLBACK(combo_box_scroll_event_cb), NULL); g_signal_connect(G_OBJECT(status_box->imhtml), "scroll_event", G_CALLBACK(imhtml_scroll_event_cb), status_box->imhtml); + g_signal_connect(G_OBJECT(status_box->tree_view), "button_release_event", G_CALLBACK(treeview_button_release_cb), status_box); #if GTK_CHECK_VERSION(2,6,0) - gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(status_box), dropdown_store_row_separator_func, NULL, NULL); + gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(status_box->tree_view), dropdown_store_row_separator_func, NULL, NULL); #endif status_box->token_status_account = check_active_accounts_for_identical_statuses(); @@ -1402,8 +1549,6 @@ GAIM_CALLBACK(account_status_changed_cb), status_box); - gaim_prefs_connect_callback(status_box, "/gaim/gtk/blist/show_buddy_icons", - buddy_list_details_pref_changed_cb, status_box); gaim_prefs_connect_callback(status_box, "/gaim/gtk/conversations/spellcheck", spellcheck_prefs_cb, status_box); gaim_prefs_connect_callback(status_box, "/gaim/gtk/accounts/buddyicon", @@ -1415,17 +1560,20 @@ GtkRequisition *requisition) { GtkRequisition box_req; - combo_box_size_request(widget, requisition); - requisition->height += 3; + gint border_width = GTK_CONTAINER (widget)->border_width; + gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->toggle_button, requisition); + + /* Make this icon the same size as other buddy icons in the list; unless it already wants to be bigger */ + if ( gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) + requisition->height = MAX(requisition->height, 30 + (border_width*2)); + /* If the gtkimhtml is visible, then add some additional padding */ gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->vbox, &box_req); if (box_req.height > 1) requisition->height += box_req.height + 3; requisition->width = 1; - - } /* From gnome-panel */ @@ -1477,8 +1625,12 @@ GtkAllocation parent_alc, box_alc, icon_alc; gint border_width = GTK_CONTAINER (widget)->border_width; - combo_box_size_request(widget, &req); + gtk_widget_size_request(status_box->toggle_button, &req); + /* Make this icon the same size as other buddy icons in the list; unless it already wants to be bigger */ + if ( gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) + req.height = MAX(req.height, 30 + (border_width*2)); + box_alc = *allocation; box_alc.width -= (border_width * 2); @@ -1488,7 +1640,7 @@ gtk_widget_size_allocate((GTK_GAIM_STATUS_BOX(widget))->vbox, &box_alc); parent_alc = *allocation; - parent_alc.height = MAX(1,req.height - (border_width )); + parent_alc.height = MAX(1,req.height - (border_width *2)); parent_alc.width -= (border_width * 2); parent_alc.x += border_width; parent_alc.y += border_width; @@ -1498,7 +1650,7 @@ 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.height = MAX(1,req.height) - (border_width*2); icon_alc.width = icon_alc.height; if (dir == GTK_TEXT_DIR_RTL) { icon_alc.x = parent_alc.x; @@ -1516,7 +1668,6 @@ gtk_widget_size_allocate(status_box->icon_box, &icon_alc); } - combo_box_size_allocate(widget, &parent_alc); gtk_widget_size_allocate(status_box->toggle_button, &parent_alc); widget->allocation = *allocation; } @@ -1543,14 +1694,12 @@ if (include_internals) { - (* callback) (status_box->vbox, callback_data); + (* callback) (status_box->vbox, callback_data); (* callback) (status_box->toggle_button, callback_data); (* callback) (status_box->arrow, callback_data); if (status_box->icon_box) (* callback) (status_box->icon_box, callback_data); } - - combo_box_forall(container, include_internals, callback, callback_data); } GtkWidget * @@ -1599,12 +1748,10 @@ } else { - gboolean show_buddy_icons; GtkStyle *style; char aa_color[8]; gchar *escaped_title, *escaped_desc; - show_buddy_icons = gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"); style = gtk_widget_get_style(GTK_WIDGET(status_box)); snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x", style->text_aa[GTK_STATE_NORMAL].red >> 8, @@ -1613,10 +1760,9 @@ escaped_title = g_markup_escape_text(title, -1); escaped_desc = g_markup_escape_text(desc, -1); - text = g_strdup_printf("%s%s<span color=\"%s\" size=\"smaller\">%s</span>", + text = g_strdup_printf("%s - <span color=\"%s\" size=\"smaller\">%s</span>", escaped_title, - show_buddy_icons ? "\n" : " - ", - aa_color, escaped_desc); + aa_color, escaped_desc); g_free(escaped_title); g_free(escaped_desc); } @@ -1759,12 +1905,15 @@ gpointer data; gchar *title; GtkTreeIter iter; + GtkTreePath *path; char *message; GaimSavedStatus *saved_status = NULL; gboolean changed = TRUE; - - if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) + + path = gtk_tree_row_reference_get_path(status_box->active_row); + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(status_box->dropdown_store), &iter, path)) return; + gtk_tree_path_free(path); gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, TYPE_COLUMN, &type, @@ -1808,11 +1957,14 @@ gint active; GaimStatus *status; const char *id = NULL; + GtkTreePath *path = gtk_tree_row_reference_get_path(status_box->active_row); + active = gtk_tree_path_get_indices(path)[0]; + + gtk_tree_path_free(path); status = gaim_account_get_active_status(status_box->token_status_account); - g_object_get(G_OBJECT(status_box), "active", &active, NULL); - acct_status_type = find_status_type_by_index(status_box->token_status_account, active); + acct_status_type = find_status_type_by_index(status_box->token_status_account, active); id = gaim_status_type_get_id(acct_status_type); if (strncmp(id, gaim_status_get_id(status), strlen(id)) == 0) @@ -1998,18 +2150,19 @@ gtk_gaim_status_box_refresh(status_box); } -static void gtk_gaim_status_box_changed(GtkComboBox *box) +static void gtk_gaim_status_box_changed(GtkGaimStatusBox *status_box) { - GtkGaimStatusBox *status_box; + GtkTreePath *path = gtk_tree_row_reference_get_path(status_box->active_row); GtkTreeIter iter; GtkGaimStatusBoxItemType type; gpointer data; GList *accounts = NULL, *node; - status_box = GTK_GAIM_STATUS_BOX(box); - - if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) + + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(status_box->dropdown_store), &iter, path)) return; + gtk_tree_path_free(path); + gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, TYPE_COLUMN, &type, DATA_COLUMN, &data, Modified: trunk/gtk/gtkstatusbox.h =================================================================== --- trunk/gtk/gtkstatusbox.h 2006-12-01 04:38:54 UTC (rev 17863) +++ trunk/gtk/gtkstatusbox.h 2006-12-01 05:01:51 UTC (rev 17864) @@ -65,7 +65,7 @@ struct _GtkGaimStatusBox { - GtkComboBox parent_instance; + GtkContainer parent_instance; /** * This GtkListStore contains only one row--the currently selected status. @@ -128,11 +128,20 @@ GtkWidget *toggle_button; GtkWidget *vsep; GtkWidget *arrow; + + GtkWidget *popup_window; + GtkWidget *popup_frame; + GtkWidget *scrolled_window; + GtkWidget *cell_view_frame; + GtkTreeViewColumn *column; + GtkWidget *tree_view; + gboolean popup_in_progress; + GtkTreeRowReference *active_row; }; struct _GtkGaimStatusBoxClass { - GtkComboBoxClass parent_class; + GtkContainerClass parent_class; /* signals */ void (* changed) (GtkComboBox *combo_box); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-12-06 07:24:45
|
Revision: 17901 http://svn.sourceforge.net/gaim/?rev=17901&view=rev Author: sadrul Date: 2006-12-05 23:24:41 -0800 (Tue, 05 Dec 2006) Log Message: ----------- Rename gtkblist.c:_search_func to gtkutils.c:gaim_gtk_tree_view_search_equal_func. Use this in the buddylist, the statusbox dropdown and in the plugins dialog. This can also be used in the smiley-theme-list. Process Escape and Return key-presses in the statusbox dropdown. seanegan: I hope I didn't step on your toes O:-) Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkplugin.c trunk/gtk/gtkstatusbox.c trunk/gtk/gtkutils.c trunk/gtk/gtkutils.h Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-12-06 02:15:28 UTC (rev 17900) +++ trunk/gtk/gtkblist.c 2006-12-06 07:24:41 UTC (rev 17901) @@ -3622,111 +3622,6 @@ gaim_gtk_blist_sort_method_set(val); } -/* - * "This is so dead sexy." - * "Two thumbs up." - * "Best movie of the year." - * - * This is the function that handles CTRL+F searching in the buddy list. - * It finds the top-most buddy/group/chat/whatever containing the - * entered string. - * - * It's somewhat ineffecient, because we strip all the HTML from the - * "name" column of the buddy list (because the GtkTreeModel does not - * contain the screen name in a non-markedup format). But the alternative - * is to add an extra column to the GtkTreeModel. And this function is - * used rarely, so it shouldn't matter TOO much. - */ -static gboolean -_search_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer search_data) -{ - gchar *enteredstring; - gchar *tmp; - gchar *withmarkup; - gchar *nomarkup; - gchar *normalized; - gboolean result; - size_t i; - size_t len; - PangoLogAttr *log_attrs; - gchar *word; - - if (strcasecmp(key, "Global Thermonuclear War") == 0) - { - gaim_notify_info(NULL, "WOPR", - "Wouldn't you prefer a nice game of chess?", NULL); - return FALSE; - } - - gtk_tree_model_get(model, iter, column, &withmarkup, -1); - - tmp = g_utf8_normalize(key, -1, G_NORMALIZE_DEFAULT); - enteredstring = g_utf8_casefold(tmp, -1); - g_free(tmp); - - nomarkup = gaim_markup_strip_html(withmarkup); - tmp = g_utf8_normalize(nomarkup, -1, G_NORMALIZE_DEFAULT); - g_free(nomarkup); - normalized = g_utf8_casefold(tmp, -1); - g_free(tmp); - - if (gaim_str_has_prefix(normalized, enteredstring)) - { - g_free(withmarkup); - g_free(enteredstring); - g_free(normalized); - return FALSE; - } - - - /* Use Pango to separate by words. */ - len = g_utf8_strlen(normalized, -1); - log_attrs = g_new(PangoLogAttr, len + 1); - - pango_get_log_attrs(normalized, strlen(normalized), -1, NULL, log_attrs, len + 1); - - word = normalized; - result = TRUE; - for (i = 0; i < (len - 1) ; i++) - { - if (log_attrs[i].is_word_start && - gaim_str_has_prefix(word, enteredstring)) - { - result = FALSE; - break; - } - word = g_utf8_next_char(word); - } - g_free(log_attrs); - -/* The non-Pango version. */ -#if 0 - word = normalized; - result = TRUE; - while (word[0] != '\0') - { - gunichar c = g_utf8_get_char(word); - if (!g_unichar_isalnum(c)) - { - word = g_utf8_find_next_char(word, NULL); - if (gaim_str_has_prefix(word, enteredstring)) - { - result = FALSE; - break; - } - } - else - word = g_utf8_find_next_char(word, NULL); - } -#endif - - g_free(withmarkup); - g_free(enteredstring); - g_free(normalized); - - return result; -} - static void account_modified(GaimAccount *account, GaimGtkBuddyList *gtkblist) { GList *list; @@ -4173,7 +4068,7 @@ /* Enable CTRL+F searching */ gtk_tree_view_set_search_column(GTK_TREE_VIEW(gtkblist->treeview), NAME_COLUMN); - gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(gtkblist->treeview), _search_func, NULL, NULL); + gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(gtkblist->treeview), gaim_gtk_tree_view_search_equal_func, NULL, NULL); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview); Modified: trunk/gtk/gtkplugin.c =================================================================== --- trunk/gtk/gtkplugin.c 2006-12-06 02:15:28 UTC (rev 17900) +++ trunk/gtk/gtkplugin.c 2006-12-06 07:24:41 UTC (rev 17901) @@ -599,6 +599,9 @@ gtk_tree_view_column_set_sort_column_id(col, 1); g_object_unref(G_OBJECT(ls)); gtk_container_add(GTK_CONTAINER(sw), event_view); + gtk_tree_view_set_search_column(GTK_TREE_VIEW(event_view), 1); + gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(event_view), + gaim_gtk_tree_view_search_equal_func, NULL, NULL); expander = gtk_expander_new(_("<b>Plugin Details</b>")); gtk_expander_set_use_markup(GTK_EXPANDER(expander), TRUE); Modified: trunk/gtk/gtkstatusbox.c =================================================================== --- trunk/gtk/gtkstatusbox.c 2006-12-06 02:15:28 UTC (rev 17900) +++ trunk/gtk/gtkstatusbox.c 2006-12-06 07:24:41 UTC (rev 17901) @@ -1013,6 +1013,7 @@ gaim_account_get_active_status(status_box->account)); } gtk_tree_view_set_model(GTK_TREE_VIEW(status_box->tree_view), status_box->dropdown_store); + gtk_tree_view_set_search_column(GTK_TREE_VIEW(status_box->tree_view), TEXT_COLUMN); } static gboolean combo_box_scroll_event_cb(GtkWidget *w, GdkEventScroll *event, GtkIMHtml *imhtml) @@ -1397,6 +1398,18 @@ buddy_icon_set_cb(value, (GtkGaimStatusBox*) data); } +static void +treeview_activate_current_selection(GtkGaimStatusBox *status_box, GtkTreePath *path) +{ + if (status_box->active_row) + gtk_tree_row_reference_free(status_box->active_row); + + status_box->active_row = gtk_tree_row_reference_new(GTK_TREE_MODEL(status_box->dropdown_store), path); + + gaim_gtk_status_box_popdown (status_box); + gtk_gaim_status_box_changed(status_box); +} + static gboolean treeview_button_release_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *status_box) { @@ -1426,23 +1439,40 @@ event->x, event->y, &path, NULL, NULL, NULL); - - + if (!ret) return TRUE; /* clicked outside window? */ - if (status_box->active_row) - gtk_tree_row_reference_free(status_box->active_row); - - status_box->active_row = gtk_tree_row_reference_new(GTK_TREE_MODEL(status_box->dropdown_store), path); + treeview_activate_current_selection(status_box, path); gtk_tree_path_free (path); - - gaim_gtk_status_box_popdown (status_box); - gtk_gaim_status_box_changed(status_box); return TRUE; } +static gboolean +treeview_key_press_event(GtkWidget *widget, + GdkEventKey *event, GtkGaimStatusBox *box) +{ + if (box->popup_in_progress) { + if (event->keyval == GDK_Escape) { + gaim_gtk_status_box_popdown(box); + return TRUE; + } else if (event->keyval == GDK_Return) { + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(box->tree_view)); + GtkTreeIter iter; + GtkTreePath *path; + + if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { + path = gtk_tree_model_get_path(GTK_TREE_MODEL(box->dropdown_store), &iter); + treeview_activate_current_selection(box, path); + gtk_tree_path_free (path); + return TRUE; + } + } + } + return FALSE; +} + static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box) { @@ -1528,10 +1558,13 @@ status_box->column); gtk_tree_view_column_pack_start(status_box->column, icon_rend, FALSE); gtk_tree_view_column_pack_start(status_box->column, text_rend, TRUE); - gtk_tree_view_column_set_attributes(GTK_CELL_LAYOUT(status_box->column), icon_rend, "pixbuf", ICON_COLUMN, NULL); - gtk_tree_view_column_set_attributes(GTK_CELL_LAYOUT(status_box->column), text_rend, "markup", TEXT_COLUMN, NULL); + gtk_tree_view_column_set_attributes(status_box->column, icon_rend, "pixbuf", ICON_COLUMN, NULL); + gtk_tree_view_column_set_attributes(status_box->column, text_rend, "markup", TEXT_COLUMN, NULL); gtk_container_add(GTK_CONTAINER(status_box->scrolled_window), status_box->tree_view); gtk_widget_show(status_box->tree_view); + gtk_tree_view_set_search_column(GTK_TREE_VIEW(status_box->tree_view), TEXT_COLUMN); + gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(status_box->tree_view), + gaim_gtk_tree_view_search_equal_func, NULL, NULL); #if GTK_CHECK_VERSION(2, 6, 0) g_object_set(text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); @@ -1582,6 +1615,7 @@ g_signal_connect(G_OBJECT(status_box->imhtml), "scroll_event", G_CALLBACK(imhtml_scroll_event_cb), status_box->imhtml); g_signal_connect(G_OBJECT(status_box->popup_window), "button_release_event", G_CALLBACK(treeview_button_release_cb), status_box); + g_signal_connect(G_OBJECT(status_box->popup_window), "key_press_event", G_CALLBACK(treeview_key_press_event), status_box); #if GTK_CHECK_VERSION(2,6,0) gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(status_box->tree_view), dropdown_store_row_separator_func, NULL, NULL); Modified: trunk/gtk/gtkutils.c =================================================================== --- trunk/gtk/gtkutils.c 2006-12-06 02:15:28 UTC (rev 17900) +++ trunk/gtk/gtkutils.c 2006-12-06 07:24:41 UTC (rev 17901) @@ -2964,3 +2964,111 @@ return vbox; } + +/* + * "This is so dead sexy." + * "Two thumbs up." + * "Best movie of the year." + * + * This is the function that handles CTRL+F searching in the buddy list. + * It finds the top-most buddy/group/chat/whatever containing the + * entered string. + * + * It's somewhat ineffecient, because we strip all the HTML from the + * "name" column of the buddy list (because the GtkTreeModel does not + * contain the screen name in a non-markedup format). But the alternative + * is to add an extra column to the GtkTreeModel. And this function is + * used rarely, so it shouldn't matter TOO much. + */ +gboolean gaim_gtk_tree_view_search_equal_func(GtkTreeModel *model, gint column, + const gchar *key, GtkTreeIter *iter, gpointer data) +{ + gchar *enteredstring; + gchar *tmp; + gchar *withmarkup; + gchar *nomarkup; + gchar *normalized; + gboolean result; + size_t i; + size_t len; + PangoLogAttr *log_attrs; + gchar *word; + + if (strcasecmp(key, "Global Thermonuclear War") == 0) + { + gaim_notify_info(NULL, "WOPR", + "Wouldn't you prefer a nice game of chess?", NULL); + return FALSE; + } + + gtk_tree_model_get(model, iter, column, &withmarkup, -1); + if (withmarkup == NULL) /* This is probably a separator */ + return TRUE; + + tmp = g_utf8_normalize(key, -1, G_NORMALIZE_DEFAULT); + enteredstring = g_utf8_casefold(tmp, -1); + g_free(tmp); + + nomarkup = gaim_markup_strip_html(withmarkup); + tmp = g_utf8_normalize(nomarkup, -1, G_NORMALIZE_DEFAULT); + g_free(nomarkup); + normalized = g_utf8_casefold(tmp, -1); + g_free(tmp); + + if (gaim_str_has_prefix(normalized, enteredstring)) + { + g_free(withmarkup); + g_free(enteredstring); + g_free(normalized); + return FALSE; + } + + + /* Use Pango to separate by words. */ + len = g_utf8_strlen(normalized, -1); + log_attrs = g_new(PangoLogAttr, len + 1); + + pango_get_log_attrs(normalized, strlen(normalized), -1, NULL, log_attrs, len + 1); + + word = normalized; + result = TRUE; + for (i = 0; i < (len - 1) ; i++) + { + if (log_attrs[i].is_word_start && + gaim_str_has_prefix(word, enteredstring)) + { + result = FALSE; + break; + } + word = g_utf8_next_char(word); + } + g_free(log_attrs); + +/* The non-Pango version. */ +#if 0 + word = normalized; + result = TRUE; + while (word[0] != '\0') + { + gunichar c = g_utf8_get_char(word); + if (!g_unichar_isalnum(c)) + { + word = g_utf8_find_next_char(word, NULL); + if (gaim_str_has_prefix(word, enteredstring)) + { + result = FALSE; + break; + } + } + else + word = g_utf8_find_next_char(word, NULL); + } +#endif + + g_free(withmarkup); + g_free(enteredstring); + g_free(normalized); + + return result; +} + Modified: trunk/gtk/gtkutils.h =================================================================== --- trunk/gtk/gtkutils.h 2006-12-06 02:15:28 UTC (rev 17900) +++ trunk/gtk/gtkutils.h 2006-12-06 07:24:41 UTC (rev 17901) @@ -490,8 +490,6 @@ GError **error); #endif -#endif /* _GAIM_GTKUTILS_H_ */ - /** * Set or unset a custom buddyicon for a user. * @@ -523,3 +521,17 @@ void *gaim_gtk_make_mini_dialog(GaimConnection *handle, const char* stock_id, const char *primary, const char *secondary, void *user_data, ...); + +/** + * This is a callback function to be used for Ctrl+F searching in treeviews. + * Sample Use: + * gtk_tree_view_set_search_equal_func(treeview, + * gaim_gtk_tree_view_search_equal_func, + * search_data, search_data_destroy_cb); + * + */ +gboolean gaim_gtk_tree_view_search_equal_func(GtkTreeModel *model, gint column, + const gchar *key, GtkTreeIter *iter, gpointer data); + +#endif /* _GAIM_GTKUTILS_H_ */ + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ev...@us...> - 2006-12-10 02:53:56
|
Revision: 17930 http://svn.sourceforge.net/gaim/?rev=17930&view=rev Author: evands Date: 2006-12-09 18:53:54 -0800 (Sat, 09 Dec 2006) Log Message: ----------- gtkgaim changes for GaimNotifyUserInfo introduced in [17929] Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtknotify.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-12-10 02:53:09 UTC (rev 17929) +++ trunk/gtk/gtkblist.c 2006-12-10 02:53:54 UTC (rev 17930) @@ -2601,11 +2601,14 @@ else if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) { /* NOTE: THIS FUNCTION IS NO LONGER CALLED FOR CONTACTS - * See create_tip_for_node(). */ + * See create_tip_for_node(). + * + * create_tip_for_node() calls this function - what does the above mean? -evands */ GaimContact *c; GaimBuddy *b; GaimPresence *presence; + GaimNotifyUserInfo *user_info; char *tmp; time_t idle_secs, signon; @@ -2627,15 +2630,17 @@ /* Buddy Name */ tmp = g_markup_escape_text(gaim_buddy_get_name(b), -1); - g_string_append_printf(str, "<span size='larger' weight='bold'>%s</span>", tmp); + g_string_append_printf(str, "<span size='larger' weight='bold'>%s</span>\n", tmp); g_free(tmp); + user_info = gaim_notify_user_info_new(); + /* Account */ if (full && g_list_length(gaim_connections_get_all()) > 1) { tmp = g_markup_escape_text(gaim_account_get_username( gaim_buddy_get_account(b)), -1); - g_string_append_printf(str, _("\n<b>Account:</b> %s"), tmp); + gaim_notify_user_info_add_pair(user_info, _("Account"), tmp); g_free(tmp); } @@ -2647,7 +2652,7 @@ strcmp(c->alias, b->alias) != 0) { tmp = g_markup_escape_text(b->alias, -1); - g_string_append_printf(str, _("\n<b>Buddy Alias:</b> %s"), tmp); + gaim_notify_user_info_add_pair(user_info, _("Buddy Alias"), tmp); g_free(tmp); } @@ -2659,7 +2664,7 @@ if (full && b->server_alias != NULL && b->server_alias[0] != '\0') { tmp = g_markup_escape_text(b->server_alias, -1); - g_string_append_printf(str, _("\n<b>Nickname:</b> %s"), tmp); + gaim_notify_user_info_add_pair(user_info, _("Nickname"), tmp); g_free(tmp); } @@ -2668,7 +2673,7 @@ if (full && GAIM_BUDDY_IS_ONLINE(b) && signon > 0) { tmp = gaim_str_seconds_to_string(time(NULL) - signon); - g_string_append_printf(str, _("\n<b>Logged In:</b> %s"), tmp); + gaim_notify_user_info_add_pair(user_info, _("Logged In"), tmp); g_free(tmp); } @@ -2679,7 +2684,7 @@ if (idle_secs > 0) { tmp = gaim_str_seconds_to_string(time(NULL) - idle_secs); - g_string_append_printf(str, _("\n<b>Idle:</b> %s"), tmp); + gaim_notify_user_info_add_pair(user_info, _("Idle"), tmp); g_free(tmp); } } @@ -2714,7 +2719,7 @@ if (lastseen > 0) { tmp = gaim_str_seconds_to_string(time(NULL) - lastseen); - g_string_append_printf(str, _("\n<b>Last Seen:</b> %s ago"), tmp); + gaim_notify_user_info_add_pair(user_info, _("Last Seen"), tmp); g_free(tmp); } } @@ -2723,22 +2728,28 @@ /* Offline? */ /* FIXME: Why is this status special-cased by the core? -- rlaager */ if (!GAIM_BUDDY_IS_ONLINE(b)) { - g_string_append_printf(str, _("\n<b>Status:</b> Offline")); + gaim_notify_user_info_add_pair(user_info, _("Status"), _("Offline")); } if (prpl_info && prpl_info->tooltip_text) { /* Additional text from the PRPL */ - prpl_info->tooltip_text(b, str, full); + prpl_info->tooltip_text(b, user_info, full); } /* These are Easter Eggs. Patches to remove them will be rejected. */ if (!g_ascii_strcasecmp(b->name, "robflynn")) - g_string_append(str, _("\n<b>Description:</b> Spooky")); + gaim_notify_user_info_add_pair(user_info, _("Description"), _("Spooky")); if (!g_ascii_strcasecmp(b->name, "seanegn")) - g_string_append(str, _("\n<b>Status:</b> Awesome")); + gaim_notify_user_info_add_pair(user_info, _("Status"), _("Awesome")); if (!g_ascii_strcasecmp(b->name, "chipx86")) - g_string_append(str, _("\n<b>Status:</b> Rockin'")); + gaim_notify_user_info_add_pair(user_info, _("Status"), _("Rockin'")); + + tmp = gaim_notify_user_info_get_text_with_newline(user_info, "\n"); + g_string_append(str, tmp); + g_free(tmp); + + gaim_notify_user_info_destroy(user_info); } gaim_signal_emit(gaim_gtk_blist_get_handle(), Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-12-10 02:53:09 UTC (rev 17929) +++ trunk/gtk/gtknotify.c 2006-12-10 02:53:54 UTC (rev 17930) @@ -841,13 +841,15 @@ static void * gaim_gtk_notify_userinfo(GaimConnection *gc, const char *who, - const char *text) + GaimNotifyUserInfo *user_info) { - char *primary; + char *primary, *info; void *ui_handle; primary = g_strdup_printf(_("Info for %s"), who); - ui_handle = gaim_gtk_notify_formatted(_("Buddy Information"), primary, NULL, text); + info = gaim_notify_user_info_get_text_with_newline(user_info, "<br />"); + ui_handle = gaim_gtk_notify_formatted(_("Buddy Information"), primary, NULL, info); + g_free(info); g_free(primary); return ui_handle; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-12-11 23:41:36
|
Revision: 17965 http://svn.sourceforge.net/gaim/?rev=17965&view=rev Author: seanegan Date: 2006-12-11 15:41:34 -0800 (Mon, 11 Dec 2006) Log Message: ----------- Patch from eperez: Show buddy icons in Accounts window. I also took the liberty of rearranging the columns in the list to something a little more sensible. I'm also thinking we should show the global icon for accounts that are using it Modified Paths: -------------- trunk/gtk/gtkaccount.c trunk/gtk/gtkscrollbook.c Modified: trunk/gtk/gtkaccount.c =================================================================== --- trunk/gtk/gtkaccount.c 2006-12-11 22:03:18 UTC (rev 17964) +++ trunk/gtk/gtkaccount.c 2006-12-11 23:41:34 UTC (rev 17965) @@ -49,6 +49,7 @@ enum { COLUMN_ICON, + COLUMN_BUDDYICON, COLUMN_SCREENNAME, COLUMN_ENABLED, COLUMN_PROTOCOL, @@ -1920,17 +1921,29 @@ GtkCellRenderer *renderer; GtkTreeViewColumn *column; + /* Enabled */ + renderer = gtk_cell_renderer_toggle_new(); + + g_signal_connect(G_OBJECT(renderer), "toggled", + G_CALLBACK(enabled_cb), dialog); + + column = gtk_tree_view_column_new_with_attributes(_("Enabled"), + renderer, "active", COLUMN_ENABLED, NULL); + + gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1); + gtk_tree_view_column_set_resizable(column, TRUE); + /* Screen Name column */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, _("Screen Name")); gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1); gtk_tree_view_column_set_resizable(column, TRUE); - /* Icon */ + /* Status Icon */ renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, - "pixbuf", COLUMN_ICON); + "pixbuf", COLUMN_BUDDYICON); /* Screen Name */ renderer = gtk_cell_renderer_text_new(); @@ -1939,24 +1952,19 @@ "text", COLUMN_SCREENNAME); dialog->screenname_col = column; - /* Enabled */ - renderer = gtk_cell_renderer_toggle_new(); - g_signal_connect(G_OBJECT(renderer), "toggled", - G_CALLBACK(enabled_cb), dialog); - - column = gtk_tree_view_column_new_with_attributes(_("Enabled"), - renderer, "active", COLUMN_ENABLED, NULL); - - gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1); - gtk_tree_view_column_set_resizable(column, TRUE); - /* Protocol name */ column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, _("Protocol")); gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1); gtk_tree_view_column_set_resizable(column, TRUE); + /* Icon */ + renderer = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, renderer, FALSE); + gtk_tree_view_column_add_attribute(column, renderer, + "pixbuf", COLUMN_ICON); + renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, @@ -1967,13 +1975,23 @@ set_account(GtkListStore *store, GtkTreeIter *iter, GaimAccount *account) { GdkPixbuf *pixbuf; + GdkPixbuf *statusicon_pixbuf; + GdkPixbuf *statusicon_pixbuf_scaled; pixbuf = gaim_gtk_create_prpl_icon(account, 0.5); if ((pixbuf != NULL) && gaim_account_is_disconnected(account)) gdk_pixbuf_saturate_and_pixelate(pixbuf, pixbuf, 0.0, FALSE); + statusicon_pixbuf = gdk_pixbuf_new_from_file(gaim_account_get_ui_string(account, GAIM_GTK_UI, "non-global-buddyicon-path", NULL), NULL); + if (statusicon_pixbuf) { + statusicon_pixbuf_scaled = gdk_pixbuf_scale_simple(statusicon_pixbuf, 16, 16, GDK_INTERP_HYPER); + } else { + statusicon_pixbuf_scaled = NULL; + } + gtk_list_store_set(store, iter, COLUMN_ICON, pixbuf, + COLUMN_BUDDYICON, statusicon_pixbuf_scaled, COLUMN_SCREENNAME, gaim_account_get_username(account), COLUMN_ENABLED, gaim_account_get_enabled(account, GAIM_GTK_UI), COLUMN_PROTOCOL, gaim_account_get_protocol_name(account), @@ -1982,6 +2000,10 @@ if (pixbuf != NULL) g_object_unref(G_OBJECT(pixbuf)); + if (statusicon_pixbuf != NULL) + g_object_unref(G_OBJECT(statusicon_pixbuf)); + if (statusicon_pixbuf_scaled != NULL) + g_object_unref(G_OBJECT(statusicon_pixbuf_scaled)); } static void @@ -2128,6 +2150,7 @@ /* Create the list model. */ dialog->model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, /* COLUMN_ICON */ + GDK_TYPE_PIXBUF, /* COLUMN_BUDDYICON */ G_TYPE_STRING, /* COLUMN_SCREENNAME */ G_TYPE_BOOLEAN, /* COLUMN_ENABLED */ G_TYPE_STRING, /* COLUMN_PROTOCOL */ Modified: trunk/gtk/gtkscrollbook.c =================================================================== --- trunk/gtk/gtkscrollbook.c 2006-12-11 22:03:18 UTC (rev 17964) +++ trunk/gtk/gtkscrollbook.c 2006-12-11 23:41:34 UTC (rev 17965) @@ -28,6 +28,10 @@ static void gtk_gaim_scroll_book_init (GtkGaimScrollBook *scroll_book); static void gtk_gaim_scroll_book_class_init (GtkGaimScrollBookClass *klass); +static void gtk_gaim_scroll_book_forall (GtkContainer *c, + gboolean include_internals, + GtkCallback callback, + gpointer user_data); GType gtk_gaim_scroll_book_get_type (void) @@ -145,11 +149,25 @@ } static void +gtk_gaim_scroll_book_forall(GtkContainer *container, + gboolean include_internals, + GtkCallback callback, + gpointer callback_data) +{ + GtkGaimScrollBook *scroll_book = GTK_GAIM_SCROLL_BOOK(container); + if (include_internals) { + (*callback)(scroll_book->hbox, callback_data); + } + (*callback)(scroll_book->notebook, callback_data); +} + +static void gtk_gaim_scroll_book_class_init (GtkGaimScrollBookClass *klass) { GtkContainerClass *container_class = (GtkContainerClass*)klass; container_class->add = gtk_gaim_scroll_book_add; + container_class->forall = gtk_gaim_scroll_book_forall; } @@ -186,7 +204,6 @@ g_signal_connect_swapped(G_OBJECT(scroll_book->notebook), "add", G_CALLBACK(page_count_change_cb), scroll_book); g_signal_connect_swapped(G_OBJECT(scroll_book->notebook), "remove", G_CALLBACK(page_count_change_cb), scroll_book); g_signal_connect(G_OBJECT(scroll_book->notebook), "switch-page", G_CALLBACK(switch_page_cb), scroll_book); - gtk_widget_hide(scroll_book->hbox); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-12-12 04:45:12
|
Revision: 17968 http://svn.sourceforge.net/gaim/?rev=17968&view=rev Author: seanegan Date: 2006-12-11 20:45:02 -0800 (Mon, 11 Dec 2006) Log Message: ----------- incomplete. Working on this from home. You may see where it's going. Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/gtkscrollbook.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-12-12 03:30:49 UTC (rev 17967) +++ trunk/gtk/gtkblist.c 2006-12-12 04:45:02 UTC (rev 17968) @@ -3671,6 +3671,26 @@ return FALSE; } +static gboolean +headline_box_enter_cb(GtkWidget *widget, GdkEventCrossing *event, GaimGtkBuddyList *gtkblist) +{ + gdk_window_set_cursor(widget->window, gtkblist->hand_cursor); + return FALSE; +} + +static gboolean +headline_box_leave_cb(GtkWidget *widget, GdkEventCrossing *event, GaimGtkBuddyList *gtkblist) +{ + gdk_window_set_cursor(widget->window, gtkblist->arrow_cursor); + return FALSE; +} + +static gboolean +headline_box_press_cb(GtkWidget *widget, GdkEventButton *event, GaimGtkBuddyList *box) +{ + gtk_widget_hide(gtkblist->headline_hbox); +} + /***********************************/ /* Connection error handling stuff */ /***********************************/ @@ -3790,7 +3810,27 @@ create_connection_error_buttons, NULL); } +static gboolean +paint_headline_hbox (GtkWidget *widget, + GdkEventExpose *event, + gpointer user_data) +{ + gtk_paint_flat_box (widget->style, + widget->window, + GTK_STATE_NORMAL, + GTK_SHADOW_OUT, + NULL, + widget, + "tooltip", + widget->allocation.x + 1, + widget->allocation.y + 1, + widget->allocation.width - 2, + widget->allocation.height - 2); + + return FALSE; +} + /******************************************/ /* End of connection error handling stuff */ /******************************************/ @@ -3848,6 +3888,7 @@ GtkCellRenderer *rend; GtkTreeViewColumn *column; GtkWidget *menu; + GtkWidget *ebox; GtkWidget *sw; GtkWidget *sep; GtkWidget *label; @@ -3941,6 +3982,25 @@ gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 1); } + ebox = gtk_event_box_new(); + gtk_box_pack_start(GTK_BOX(gtkblist->vbox), ebox, FALSE, FALSE, 0); + gtkblist->headline_hbox = gtk_hbox_new(FALSE, 3); + gtk_container_set_border_width(GTK_CONTAINER(gtkblist->headline_hbox), 6); + gtk_container_add(GTK_CONTAINER(ebox), gtkblist->headline_hbox); + gtkblist->headline_image = gtk_image_new_from_pixbuf(NULL); + gtkblist->headline_label = gtk_label_new(NULL); + gtk_box_pack_start(GTK_BOX(gtkblist->headline_hbox), gtkblist->headline_image, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gtkblist->headline_hbox), gtkblist->headline_label, TRUE, TRUE, 0); + g_signal_connect (gtkblist->headline_hbox, + "expose_event", + G_CALLBACK (paint_headline_hbox), + NULL); + gtkblist->hand_cursor = gdk_cursor_new (GDK_HAND2); + gtkblist->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR); + g_signal_connect(G_OBJECT(ebox), "enter-notify-event", G_CALLBACK(headline_box_enter_cb), gtkblist); + g_signal_connect(G_OBJECT(ebox), "leave-notify-event", G_CALLBACK(headline_box_leave_cb), gtkblist); + g_signal_connect(G_OBJECT(ebox), "button-press-event", G_CALLBACK(headline_box_press_cb), gtkblist); + /****************************** GtkTreeView **********************************/ sw = gtk_scrolled_window_new(NULL,NULL); gtk_widget_show(sw); @@ -4082,11 +4142,11 @@ 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); + gtkblist->scrollbook = gtk_gaim_scroll_book_new(); gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->scrollbook, FALSE, FALSE, 0); - - 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); @@ -4745,6 +4805,11 @@ g_free(gtkblist); accountmenu = NULL; gtkblist = NULL; + + gdk_cursor_unref(gtkblist->hand_cursor); + gdk_cursor_unref(gtkblist->arrow_cursor); + gtkblist->hand_cursor = NULL; + gtkblist->arrow_cursor = NULL; gaim_prefs_disconnect_by_handle(gaim_gtk_blist_get_handle()); } @@ -5413,6 +5478,16 @@ gtk_container_add(GTK_CONTAINER(gtkblist->scrollbook), widget); } +void +gaim_gtk_blist_set_headline(const char *text, GdkPixbuf *pixbuf, GCallback callback, gpointer user_data) +{ + gtk_label_set_markup(gtkblist->headline_label, text); + gtk_image_set_from_pixbuf(gtkblist->headline_image, pixbuf); + + gtkblist->headline_callback = callback; + gtkblist->headline_data = user_data; + gtk_widget_show_all(gtkblist->headline_hbox); +} static GaimBlistUiOps blist_ui_ops = { Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-12-12 03:30:49 UTC (rev 17967) +++ trunk/gtk/gtkblist.h 2006-12-12 04:45:02 UTC (rev 17968) @@ -95,9 +95,17 @@ GList *tooltipdata; /**< The data for each "chunk" of the tooltip */ GaimBlistNode *selected_node; /**< The currently selected node */ + + GdkCursor *hand_cursor; /**< Hand cursor */ + GdkCursor *arrow_cursor; /**< Arrow cursor */ GtkWidget *scrollbook; /**< Scrollbook for alerts */ - + GtkWidget *headline_hbox; /**< Hbox for headline notification */ + GtkWidget *headline_label; /**< Label for headline notifications */ + GtkWidget *headline_image; /**< Image for headline notifications */ + GCallback headline_callback; /**< Callback for headline notifications */ + gpointer headline_data; /**< User data for headline notifications */ + GtkWidget *error_buttons; /**< Box containing the connection error buttons */ GtkWidget *statusbox; /**< The status selector dropdown */ }; @@ -314,4 +322,17 @@ */ void gaim_gtk_blist_update_account_error_state(GaimAccount *account, const char *message); +/** + * Sets a headline notification + * + * This is currently used for mail notification, but could theoretically be used for anything. + * Only the most recent headline will be shown. + * + * @param text Pango Markup for the label text + * @param pixbuf The GdkPixbuf for the icon + * @param callback The callback to call when headline is clicked + * @param user_data The userdata to include in the callback + */ +void gaim_gtk_blist_set_headline(const char *text, GdkPixbuf *pixbuf, GCallback callback, gpointer user_data); + #endif /* _GAIM_GTKBLIST_H_ */ Modified: trunk/gtk/gtkscrollbook.c =================================================================== --- trunk/gtk/gtkscrollbook.c 2006-12-12 03:30:49 UTC (rev 17967) +++ trunk/gtk/gtkscrollbook.c 2006-12-12 04:45:02 UTC (rev 17968) @@ -92,7 +92,6 @@ refresh_scroll_box(GtkGaimScrollBook *scroll_book, int index, int count) { char *label; - gtk_widget_show_all(GTK_WIDGET(scroll_book)); if (count <= 1) gtk_widget_hide(GTK_WIDGET(scroll_book->hbox)); @@ -120,9 +119,10 @@ static void page_count_change_cb(GtkGaimScrollBook *scroll_book) { + int count; int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook)); #if GTK_CHECK_VERSION(2,2,0) - int count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook)); + count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook)); #else count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children); #endif @@ -146,6 +146,7 @@ { gtk_widget_show(widget); gtk_notebook_append_page(GTK_NOTEBOOK(GTK_GAIM_SCROLL_BOOK(container)->notebook), widget, NULL); + page_count_change_cb(GTK_GAIM_SCROLL_BOOK(container)); } static void @@ -155,9 +156,8 @@ gpointer callback_data) { GtkGaimScrollBook *scroll_book = GTK_GAIM_SCROLL_BOOK(container); - if (include_internals) { + if (include_internals) (*callback)(scroll_book->hbox, callback_data); - } (*callback)(scroll_book->notebook, callback_data); } @@ -201,9 +201,10 @@ gtk_box_pack_start(GTK_BOX(scroll_book), scroll_book->notebook, TRUE, TRUE, 0); - g_signal_connect_swapped(G_OBJECT(scroll_book->notebook), "add", G_CALLBACK(page_count_change_cb), scroll_book); g_signal_connect_swapped(G_OBJECT(scroll_book->notebook), "remove", G_CALLBACK(page_count_change_cb), scroll_book); g_signal_connect(G_OBJECT(scroll_book->notebook), "switch-page", G_CALLBACK(switch_page_cb), scroll_book); + gtk_widget_show_all(scroll_book->hbox); + gtk_widget_show_all(scroll_book->notebook); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sea...@us...> - 2006-12-12 09:01:03
|
Revision: 17973 http://svn.sourceforge.net/gaim/?rev=17973&view=rev Author: seanegan Date: 2006-12-12 00:53:35 -0800 (Tue, 12 Dec 2006) Log Message: ----------- I realized doing Gmail notifications that mail notifications spawn dialogs that are non-user-initiated. I no longer like this, so I came up with "headlines," non-critical alerts that appear at the top of the buddy list until they're clicked or a new headline is set. Now, when you get a new mail notification, a headline will appear saying "You have 60 new e-mails." When you click it, the old mail notification will show up. Also, it looks wicked awesome: http://gaim.sf.net/sean/images/headline.png Modified Paths: -------------- trunk/gtk/gtkblist.c trunk/gtk/gtkblist.h trunk/gtk/gtknotify.c trunk/gtk/gtkscrollbook.c trunk/gtk/gtkutils.c Modified: trunk/gtk/gtkblist.c =================================================================== --- trunk/gtk/gtkblist.c 2006-12-12 08:52:46 UTC (rev 17972) +++ trunk/gtk/gtkblist.c 2006-12-12 08:53:35 UTC (rev 17973) @@ -3686,9 +3686,11 @@ } static gboolean -headline_box_press_cb(GtkWidget *widget, GdkEventButton *event, GaimGtkBuddyList *box) +headline_box_press_cb(GtkWidget *widget, GdkEventButton *event, GaimGtkBuddyList *gtkblist) { gtk_widget_hide(gtkblist->headline_hbox); + if (gtkblist->headline_callback) + g_idle_add(G_CALLBACK(gtkblist->headline_callback), gtkblist->headline_data); } /***********************************/ @@ -3812,8 +3814,8 @@ static gboolean paint_headline_hbox (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data) + GdkEventExpose *event, + gpointer user_data) { gtk_paint_flat_box (widget->style, widget->window, @@ -3830,7 +3832,30 @@ return FALSE; } +static void +headline_style_set (GtkWidget *widget, + GtkStyle *prev_style) +{ + GtkTooltips *tooltips; + GtkStyle *style; + + if (gtkblist->changing_style) + return; + + tooltips = gtk_tooltips_new (); + g_object_ref_sink (tooltips); + gtk_tooltips_force_window (tooltips); + gtk_widget_ensure_style (tooltips->tip_window); + style = gtk_widget_get_style (tooltips->tip_window); + + gtkblist->changing_style = TRUE; + gtk_widget_set_style (gtkblist->headline_hbox, style); + gtkblist->changing_style = FALSE; + + g_object_unref (tooltips); +} + /******************************************/ /* End of connection error handling stuff */ /******************************************/ @@ -3988,13 +4013,23 @@ gtk_container_set_border_width(GTK_CONTAINER(gtkblist->headline_hbox), 6); gtk_container_add(GTK_CONTAINER(ebox), gtkblist->headline_hbox); gtkblist->headline_image = gtk_image_new_from_pixbuf(NULL); + gtk_misc_set_alignment(GTK_MISC(gtkblist->headline_image), 0.0, 0); gtkblist->headline_label = gtk_label_new(NULL); + gtk_widget_set_size_request(gtkblist->headline_label, + gaim_prefs_get_int("/gaim/gtk/blist/width")-25,-1); + gtk_label_set_line_wrap(GTK_LABEL(gtkblist->headline_label), TRUE); gtk_box_pack_start(GTK_BOX(gtkblist->headline_hbox), gtkblist->headline_image, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(gtkblist->headline_hbox), gtkblist->headline_label, TRUE, TRUE, 0); + g_signal_connect(gtkblist->headline_hbox, + "style-set", + G_CALLBACK(headline_style_set), + NULL); g_signal_connect (gtkblist->headline_hbox, "expose_event", G_CALLBACK (paint_headline_hbox), NULL); + gtk_widget_set_name(gtkblist->headline_hbox, "gtk-tooltips"); + gtkblist->hand_cursor = gdk_cursor_new (GDK_HAND2); gtkblist->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR); g_signal_connect(G_OBJECT(ebox), "enter-notify-event", G_CALLBACK(headline_box_enter_cb), gtkblist); @@ -4247,7 +4282,8 @@ gtkblist, GAIM_CALLBACK(conversation_deleting_cb), gtkblist); - gtk_widget_hide(gtkblist->scrollbook); +// gtk_widget_hide(gtkblist->scrollbook); + gtk_widget_hide(gtkblist->headline_hbox); /* emit our created signal */ gaim_signal_emit(handle, "gtkblist-created", list); @@ -5481,8 +5517,8 @@ void gaim_gtk_blist_set_headline(const char *text, GdkPixbuf *pixbuf, GCallback callback, gpointer user_data) { - gtk_label_set_markup(gtkblist->headline_label, text); - gtk_image_set_from_pixbuf(gtkblist->headline_image, pixbuf); + gtk_label_set_markup(GTK_LABEL(gtkblist->headline_label), text); + gtk_image_set_from_pixbuf(GTK_IMAGE(gtkblist->headline_image), pixbuf); gtkblist->headline_callback = callback; gtkblist->headline_data = user_data; Modified: trunk/gtk/gtkblist.h =================================================================== --- trunk/gtk/gtkblist.h 2006-12-12 08:52:46 UTC (rev 17972) +++ trunk/gtk/gtkblist.h 2006-12-12 08:53:35 UTC (rev 17973) @@ -105,6 +105,7 @@ GtkWidget *headline_image; /**< Image for headline notifications */ GCallback headline_callback; /**< Callback for headline notifications */ gpointer headline_data; /**< User data for headline notifications */ + gboolean changing_style; /**< True when changing GTK+ theme style */ GtkWidget *error_buttons; /**< Box containing the connection error buttons */ GtkWidget *statusbox; /**< The status selector dropdown */ Modified: trunk/gtk/gtknotify.c =================================================================== --- trunk/gtk/gtknotify.c 2006-12-12 08:52:46 UTC (rev 17972) +++ trunk/gtk/gtknotify.c 2006-12-12 08:53:35 UTC (rev 17973) @@ -83,6 +83,7 @@ GtkTreeStore *treemodel; GtkLabel *label; GtkWidget *open_button; + int total_count; }; static GaimMailDialog *mail_dialog = NULL; @@ -426,6 +427,7 @@ if (detailed) { dialog = mail_dialog->dialog; + mail_dialog->total_count += count; while (count--) { char *to_text = NULL; @@ -500,7 +502,16 @@ g_free(detail_text); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); } - gtk_widget_show_all(dialog); + if (!GTK_WIDGET_VISIBLE(dialog)) { + GdkPixbuf *pixbuf = gtk_widget_render_icon(dialog, GAIM_STOCK_ICON_ONLINE_MSG, + GTK_ICON_SIZE_BUTTON, NULL); + char *label_text = g_strdup_printf(ngettext("<b>You have %d new e-mail.</b>", + "<b>You have %d new e-mails.</b>", + mail_dialog->total_count), mail_dialog->total_count); + gaim_gtk_blist_set_headline(label_text, + pixbuf, G_CALLBACK(gtk_widget_show_all), dialog); + g_object_unref(pixbuf); + } return data; } Modified: trunk/gtk/gtkscrollbook.c =================================================================== --- trunk/gtk/gtkscrollbook.c 2006-12-12 08:52:46 UTC (rev 17972) +++ trunk/gtk/gtkscrollbook.c 2006-12-12 08:53:35 UTC (rev 17973) @@ -203,7 +203,6 @@ g_signal_connect_swapped(G_OBJECT(scroll_book->notebook), "remove", G_CALLBACK(page_count_change_cb), scroll_book); g_signal_connect(G_OBJECT(scroll_book->notebook), "switch-page", G_CALLBACK(switch_page_cb), scroll_book); - gtk_widget_show_all(scroll_book->hbox); gtk_widget_show_all(scroll_book->notebook); } Modified: trunk/gtk/gtkutils.c =================================================================== --- trunk/gtk/gtkutils.c 2006-12-12 08:52:46 UTC (rev 17972) +++ trunk/gtk/gtkutils.c 2006-12-12 08:53:35 UTC (rev 17973) @@ -2928,8 +2928,7 @@ g_free(primary_esc); label = gtk_label_new(NULL); gtk_widget_set_size_request(label, gaim_prefs_get_int("/gaim/gtk/blist/width")-25,-1); - gtk_widget_modify_text(vbox, GTK_STATE_NORMAL, &(label->style->white)); - gtk_label_set_markup(GTK_LABEL(label), label_text); + gtk_label_set_markup(GTK_LABEL(label), label_text); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |